diff --git a/docs/EVIDENCE.md b/docs/EVIDENCE.md index b0df9658..35a0e362 100644 --- a/docs/EVIDENCE.md +++ b/docs/EVIDENCE.md @@ -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、完整后端或性能通过。 | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 3e4f52f8..b2813767 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -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` 或实验后端联合配置。 diff --git a/docs/research/conpty-source-margin-styles.md b/docs/research/conpty-source-margin-styles.md index 6f99b89b..40a5b642 100644 --- a/docs/research/conpty-source-margin-styles.md +++ b/docs/research/conpty-source-margin-styles.md @@ -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。 ## 运行前固定的场景 diff --git a/docs/research/windterm-styled-margin-reference.md b/docs/research/windterm-styled-margin-reference.md new file mode 100644 index 00000000..10e04a00 --- /dev/null +++ b/docs/research/windterm-styled-margin-reference.md @@ -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 和性能仍未验收。 diff --git a/research/ui/results/2026-10-27-styled-native-reference/validation.json b/research/ui/results/2026-10-27-styled-native-reference/validation.json new file mode 100644 index 00000000..b4db673d --- /dev/null +++ b/research/ui/results/2026-10-27-styled-native-reference/validation.json @@ -0,0 +1,1339 @@ +{ + "schema": "termforge-windterm-styled-native-reference-v1", + "scope": "One original local-shell observation; no product behavior approval or terminal-style equivalence.", + "source_commit": "dc5c631ffdf83dfbdfcb8b359137e0d87212ac6d", + "declared_maximum_runs": 1, + "actual_runs": 1, + "native_executions": 1, + "reference_identity": { + "exe_sha256": "7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0", + "files_manifest_sha256": "e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203", + "files_count": 4047 + }, + "environment": { + "os_observed_in_cmd_banner": "10.0.26200.9711", + "platform": "Windows x64", + "viewport": [ + 80, + 24 + ], + "native_main_buffer": [ + 80, + 3000 + ] + }, + "native_probe_sha256": "ca19645b65aea8ac74b56d1e59837cb7514c3acf5932d24112411725b92206d7", + "python_exe_sha256": "0b471133e110cfb53a061cad528ce8e517d7b9ac41a0a396c39ad795a487fc14", + "rea_cli_sha256": "ed06cee49505b95a3cc5fceb1b4b279167e26df86227c644bb366ffffdbaf738", + "source_files_sha256": { + "research/ui/r1_launch.py": "54fb41872c6abcc48242a0938044184854b016785cc13659c66b1bf404da0d8a", + "research/ui/launch.py": "6970e0d4f2fe5e7ec4827df7aa1026cd0e74aeb828cdc9b7a0b42b3c887eb4e6", + "research/ui/qt_r1_text.js": "f5820d413fdd72c13dffcefbf4d0ade615abfe15754c6b0b52e1e098814eea6f", + "experiments/conpty/margin_controls_probe.cpp": "5095dd3a113b799d417e522cbbe30aa0217a539dd46e1c096a8b707ab709b4c7" + }, + "probe_files_sha256": { + "prepare.py": "a37ec9364b34504959d4b73288bc7830cfb70f0352291a0b6e59fe0ef36cd76d", + "launch.py": "6bb19424171dade4a20faa4ea3067209c77d39fcde79dca93c631ff6bcf3b832", + "launcher.patch": "40f4d4c2c921f46e2a64cf68feb546ba362645150032e439db8863f13156b2e9", + "styled_probe.py": "2fabe0ce19967d3885cb04920fddd57a5c644dcbf41797eda0bb3d22772d6326", + "driver.js": "6f2fb7987186570a1761bddff3738539f622ccf1794991f3560c91a3e3ad73b9", + "stages.js": "a2439d58be27794b1b4f82cadf4044422ae74c9e44f44f8d4572198dd8ac90d1", + "qt_r1_text.js": "c182d9758f2c0dacf04cd755d24ffbb2076b53ae9fe3f617d7ad5d886e9d0288" + }, + "script_sha256": "20d41d7663711bf76f4dc2412e1a6ea41bf3add815d3c61793998d5436aae76d", + "template_sha256": "c182d9758f2c0dacf04cd755d24ffbb2076b53ae9fe3f617d7ad5d886e9d0288", + "fixture_sha256": "2fabe0ce19967d3885cb04920fddd57a5c644dcbf41797eda0bb3d22772d6326", + "source": { + "bytes": 211, + "sha256": "51d0f55717ff8fbe5e82040967edf2f9399a9b893fd8e8cb282f94c143919b62", + "hex": "1b5b306d1b5b324a1b5b48544f505f46495845440d0a524547494f4e5f410d0a524547494f4e5f420d0a424f54544f4d5f46495845440d0a1b5b323b33721b5b33313b34346d1b5b333b36481b5b3f31303439681b5b306d1b5b324a1b5b48414c545f4f5554534944450d0a1b5b343b3148414c545f410d0a414c545f421b5b343b35721b5b33323b34356d1b5b353b31480a414c545f430a414c545f441b5b353b38481b5b3f313034396c4d1b5b333b31480a524547494f4e5f430a524547494f4e5f441b5b363b31485347525f444f4e45" + }, + "status": "observed-styled-reference", + "scenario_error": null, + "backend_calls": [ + { + "function": "winpty_open", + "success": true, + "size": null + }, + { + "function": "winpty_spawn", + "success": true, + "size": null + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 91, + 23 + ] + }, + { + "function": "winpty_set_size", + "success": true, + "size": [ + 80, + 24 + ] + } + ], + "native_wrapper": { + "before": { + "buffer": [ + 80, + 3000 + ], + "window": [ + 0, + 0, + 79, + 23 + ], + "viewport": [ + 80, + 24 + ], + "cursor": [ + 4, + 0 + ], + "attributes": 7 + }, + "output_mode_before": 3, + "output_codepage_before": 936, + "native_executions": 1, + "timed_out": false, + "exit_code": 37, + "after": { + "buffer": [ + 80, + 3000 + ], + "window": [ + 0, + 4, + 79, + 27 + ], + "viewport": [ + 80, + 24 + ], + "cursor": [ + 9, + 8 + ], + "attributes": 20 + }, + "output_mode_after": 7, + "mode_restore_ok": true, + "codepage_restore_ok": true + }, + "native_raw_contract": { + "stages": { + "before": { + "text": true, + "cell_text": true, + "cells_and_attributes": true, + "cursor": false, + "viewport": false, + "passed": false + }, + "alt": { + "text": true, + "cell_text": true, + "cells_and_attributes": true, + "cursor": true, + "viewport": true, + "passed": true + }, + "restored": { + "text": true, + "cell_text": true, + "cells_and_attributes": true, + "cursor": false, + "viewport": false, + "passed": false + }, + "after-write": { + "text": true, + "cell_text": true, + "cells_and_attributes": true, + "cursor": false, + "viewport": false, + "passed": false + }, + "final": { + "text": false, + "cell_text": false, + "cells_and_attributes": false, + "cursor": false, + "viewport": false, + "passed": false + } + }, + "passed": false, + "initial_native_attribute": 7, + "full_r2_contract_verified": false + }, + "raw_baseline_prediction_matches": false, + "viewport_relative_diagnostic": { + "only_changes": [ + "cursor_row minus viewport top", + "viewport top projected to zero" + ], + "matches_fixed_source_baseline_prediction": true, + "product_contract_changed": false, + "raw_contract_passed": false + }, + "native_stages": { + "before": { + "top": 4, + "cursor": [ + 6, + 5 + ], + "relative_cursor": [ + 2, + 5 + ], + "lines": [ + "TOP_FIXED", + "REGION_A", + "REGION_B", + "BOTTOM_FIXED", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "attribute_runs": [ + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ] + ] + }, + "alt": { + "top": 0, + "cursor": [ + 4, + 7 + ], + "relative_cursor": [ + 4, + 7 + ], + "lines": [ + "ALT_OUTSIDE", + "", + "", + "ALT_C", + "ALT_D", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "attribute_runs": [ + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 82, + 80 + ] + ], + [ + [ + 82, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ] + ] + }, + "restored": { + "top": 4, + "cursor": [ + 6, + 5 + ], + "relative_cursor": [ + 2, + 5 + ], + "lines": [ + "TOP_FIXED", + "REGION_A", + "REGION_B", + "BOTTOM_FIXED", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "attribute_runs": [ + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ] + ] + }, + "after-write": { + "top": 4, + "cursor": [ + 6, + 6 + ], + "relative_cursor": [ + 2, + 6 + ], + "lines": [ + "TOP_FIXED", + "REGION_A", + "REGIOM_B", + "BOTTOM_FIXED", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "attribute_runs": [ + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 5 + ], + [ + 20, + 1 + ], + [ + 7, + 74 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ] + ] + }, + "final": { + "top": 4, + "cursor": [ + 9, + 8 + ], + "relative_cursor": [ + 5, + 8 + ], + "lines": [ + "TOP_FIXED", + "REGION_A", + "REGIOM_B", + "REGION_CIXED", + "REGION_D", + "SGR_DONE", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "attribute_runs": [ + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 5 + ], + [ + 20, + 1 + ], + [ + 7, + 74 + ] + ], + [ + [ + 20, + 8 + ], + [ + 7, + 72 + ] + ], + [ + [ + 20, + 8 + ], + [ + 7, + 72 + ] + ], + [ + [ + 20, + 8 + ], + [ + 7, + 72 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ], + [ + [ + 7, + 80 + ] + ] + ] + } + }, + "terminal_observation": { + "synthetic_final_tail": [ + "TOP_FIXED", + "REGION_A", + "REGIOM_B", + "REGION_CIXED", + "REGION_D", + "SGR_DONE" + ], + "observed_via": "activeText.lineText after SGR_DONE, before releasing the wrapper hold", + "screen_capacity": 24, + "cell_styles": null, + "terminal_cursor": null, + "current_style": null, + "history_isolation": null, + "api_names_observed": [ + "cursor", + "styleSheet", + "caretColumn", + "caretLine", + "caretLineOffset", + "caretPosition", + "setStyleSheet", + "caretPositionChanged", + "marginStyleChanged", + "schemeAnsiStyleChanged", + "exchangeCaretAnchor", + "gotoPosition", + "lineFromPosition", + "movePosition", + "movePositionOutsideChar", + "positionFromLine", + "positionFromPoint", + "selectionCaretP", + "setUseTabPosition", + "useTabPosition", + "visibleLineFromPosition", + "visibleRectFromPosition", + "caretVirtualSpace", + "promptPosition", + "setTimestampFormat", + "setTimestampLongFormat" + ], + "api_names_are_not_style_values": true + }, + "lifecycle": { + "native_exit_code": 37, + "shell_exit_code": 37, + "native_timeout": false, + "outer_job": { + "active": 0, + "total": 11, + "terminated": 0 + }, + "deliberate_outer_termination_requested": true, + "outer_counter_is_not_natural_exit_proof": true + }, + "budgets": { + "rea_seconds": 30, + "scenario_timeout_ms": 25000, + "client_wait_seconds": 5, + "client_cleanup_seconds": 5, + "final_screen_hold_seconds": 8 + }, + "provider": { + "evidence_id": "ev_8fbd9aead9aa5d60f49e05112c31eb542febf65084643c025eb8a52ffd590048", + "name": "Frida", + "version": null, + "confidence": "observed", + "subject": null, + "environment": null, + "captured_state": "running", + "messages_truncated": false, + "cleanup_error": null, + "limitations": [ + "Artifact identity is unavailable for this observation.", + "The target operating system and architecture were not reported by this observation." + ] + }, + "profile_check": { + "only_synthetic_session": true, + "session_count": 1 + }, + "raw_files": { + "run.json": { + "bytes": 614, + "sha256": "e5d885cbb7080c9464f4a00e4174dae3cd1660f892af4852a39b24cb1ac7eb5f" + }, + "probe.js": { + "bytes": 21561, + "sha256": "20d41d7663711bf76f4dc2412e1a6ea41bf3add815d3c61793998d5436aae76d" + }, + "probe-result.json": { + "bytes": 1619, + "sha256": "5d04c971e73dad049e011facfaa0c5d47a7b35f40ebeaf1c414f43cf9142e3d0" + }, + "profile-check.json": { + "bytes": 52, + "sha256": "5e522a64e98197722ccd084639b1ce50258b238e03be2f016e81c8af023b5ee1" + }, + "cleanup.json": { + "bytes": 43, + "sha256": "7e28113f11ad26f81fa0a314d86f1204a46e2a32ee92399b0c854315b9178b03" + }, + "evidence.json": { + "bytes": 53100, + "sha256": "be349abb34cf28f42b634ccf65bd0749e1e9940856059156b794e7968b7ef83c" + }, + "stderr.txt": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "files.json": { + "bytes": 637666, + "sha256": "a25c87cba935294d5bfd3bbc76c650d31a8473809564d798ad5a889e4aea00e8" + } + }, + "native_capture_files": { + "after-write.cells.bin": { + "bytes": 7680, + "sha256": "84708a877d836570697978465b4c2b788652b2de0a20a09d8a117111d3c82dc0" + }, + "after-write.console.bin": { + "bytes": 3840, + "sha256": "0463eaeda9c44a38ad9003ca14df549dcfc74ceb364308432aceadb7491fa007" + }, + "after-write.console.json": { + "bytes": 442, + "sha256": "1d69f86911a76f30c9201dd07ca4cbdaa8376a9113d5622a8d55d0b2b4798fb7" + }, + "alt.cells.bin": { + "bytes": 7680, + "sha256": "d2e9a140a7b7a3c537b4cb25ea306c0b26fdf9694fc8c9d44218be173a99108e" + }, + "alt.console.bin": { + "bytes": 3840, + "sha256": "f6492387ed4760be9851cccd504ac8f6f21624d55dce9671b3be4560ada0b5ac" + }, + "alt.console.json": { + "bytes": 434, + "sha256": "81304f5e1cd83bbf0039f4880b7fd44913ef877911075a69268f761f6589a29b" + }, + "before.cells.bin": { + "bytes": 7680, + "sha256": "fe9016196e03b264cce22f628f67b778fe1e6a3aeb160ed53effc153b1ff6651" + }, + "before.console.bin": { + "bytes": 3840, + "sha256": "4279b6605b0fb08728ce75e50e7b24eaf2d75e39e3d44b12b0f41d2e6ba8343b" + }, + "before.console.json": { + "bytes": 437, + "sha256": "3ea492ce7337f590ab35d6a5731e558d1013de1c0ea6f259b9f8c11596e257ca" + }, + "final.cells.bin": { + "bytes": 7680, + "sha256": "68ea1c55640dde6862f56fc015df6821072a72d589d315aff42776d5b5f46938" + }, + "final.console.bin": { + "bytes": 3840, + "sha256": "acea12c6e10ea9ad409f7c9df8015dd47ac1c4f22fbb3dfbae99fe064424807d" + }, + "final.console.json": { + "bytes": 436, + "sha256": "84ebe18c07afd3e0d4c16a0cfdc9bf558e7380c55dc51697c860dac053f2d6ee" + }, + "restored.cells.bin": { + "bytes": 7680, + "sha256": "fe9016196e03b264cce22f628f67b778fe1e6a3aeb160ed53effc153b1ff6651" + }, + "restored.console.bin": { + "bytes": 3840, + "sha256": "4279b6605b0fb08728ce75e50e7b24eaf2d75e39e3d44b12b0f41d2e6ba8343b" + }, + "restored.console.json": { + "bytes": 439, + "sha256": "bd670464add79b692c325cd9d3029ee77dc83101a54decf558b4be0e038a6097" + }, + "source.bin": { + "bytes": 211, + "sha256": "51d0f55717ff8fbe5e82040967edf2f9399a9b893fd8e8cb282f94c143919b62" + } + }, + "wrapper_result": { + "bytes": 429, + "sha256": "2b96cddfb31969f8dc33078668d7db944feeb1c3ef9e912a640ee095eac61519" + }, + "full_margin_contract_verified": false, + "product_backend_selected": false, + "presented_done": null, + "limitations": [ + "Native buffer height may differ from viewport; record both without changing buffer size.", + "Only native fields and final UI text are initially observable; terminal cell colors/cursor may remain unknown.", + "API names are availability observations, not returned style values.", + "No actual transport tap or intermediate terminal-state capture in this slice.", + "No physical display, latency, clipboard, user configuration or performance measurement.", + "Do not merge this sample with ConPTY batch as one complete backend/product acceptance.", + "Raw absolute native cursor/top are different because the original uses a taller buffer; relative-coordinate projection is diagnostic only and does not change the original gate.", + "REGION_CIXED is observed in native cells and the UI text projection. Cause attribution to a specific original component is unproven.", + "The patched source behavior differs from this observed original behavior; important original-bug fixes require user confirmation before product adoption.", + "Color/codepage restore fields report API success, without a second GetConsoleMode/GetConsoleOutputCP verification.", + "Provider subject/environment are null; pinned package identity is supplied separately by the local preparation guard.", + "The private driver and raw instrumentation are not published; this summary is not a public one-command reproduction package." + ] +}