diff --git a/docs/adr/0009-r2-scope-decisions.md b/docs/adr/0009-r2-scope-decisions.md new file mode 100644 index 00000000..b4b6e6fc --- /dev/null +++ b/docs/adr/0009-r2-scope-decisions.md @@ -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` 的回复(未实现)。