Skip to content
Merged
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
53 changes: 53 additions & 0 deletions docs/adr/0009-r2-scope-decisions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 0009 R2 范围与验收的四项决策

状态:已由用户确认(2026-10-30)。

本文记录一次集中决策,避免这些结论散落在 issue 评论里。

## 决策 1:采用 margin 补丁版的固定 ConPTY(后端)

**结论**:R2 的产品后端采用**随包固定、带 margin 补丁的 Microsoft ConPTY**。

**依据**:系统 ConPTY 1.25 在从备用屏返回主屏时不给主屏重下发滚动边距,导致主屏内容错位(实测序列 `REGION_A/REGION_B/REGION_CIXED`)。把同一份 175 字节源喂给自主核心,末屏与 `margin_checks.py` 的 `required` 逐行一致,说明差异只在后端。

**影响**:#41 的"差异裁决"落在"后端缺陷"这一侧;#47 的固定后端路线成为唯一产品路径。

**代价**:需维护一个 patch 分支并跟进上游安全更新;分发体积增加;需保留 MIT 许可与来源记录。

## 决策 2:Server 2022 句柄基线改为记录制

**结论**:`windows-2022-conpty` 不再以"句柄零增长"为门槛,改为记录计数。

**依据**:#21 证明该平台每个会话在宿主进程多复制一个 Job 句柄,且**不是我们的句柄**(`session_job` 每轮正确关闭);Win11 上 5 轮持平。

**影响**:该基线由"必然红"变为"可判读的记录",其余契约(就绪、回声、尺寸、子进程回收、退出码、记录数)保持严格。

## 决策 3:性能预算采用「回归型」而非绝对值

**结论**:R2 只用"相对已记录基线的变差"作为预算,不设绝对数值,也**不宣称与 WindTerm 性能等同**。

**理由**:目前只有诊断样本(启动 p50/p95、字素吞吐、repaint 批量等),没有受控基线与批准的绝对阈值;WindTerm 的内部耗时无法测量。

**影响**:性能守卫只防回归;绝对值预算留待有受控环境时另行确认。

## 决策 4:R2 不验收跨显示器迁移

**结论**:R2 范围限定为**单显示器 96/144 DPI**;窗口跨屏迁移、真实多屏 DPI 迁移推迟到 R4。

**影响**:#31 在 R2 保持挂起并在文档中写明范围;R4 需要有真实环境才能验收。

## 决策 5:R2 交付范围 = 终端基础 + 已知差异清单

**结论**:R2 交付只覆盖**本地终端基础**(不含 SSH/SFTP),并以"已知差异清单"随附,明确列出未实现与未验证项;不宣称日常可用或与 WindTerm 对等。

**影响**:#35 的交付门槛据此改为"基础能力 + 透明清单",而不是"全部 R2 issue 关闭"。

## 明确记录为「未知、不猜」的项

下列行为尚未观测原版,R2 期间保持现状并在文档标注:

- Qt 入口的 `Ctrl+字母`(现契约只允许 Ctrl+C);
- `DECSTBM` 光标归位方式(现按参考实现归位屏幕原点);
- 隐藏单元格的复制语义(现保留文字);
- 暗色与上划线的渲染表现(现只实现状态);
- `DA1`/`DA2`、`OSC 10/11` 的回复(未实现)。