# Agent Note: 稳定的轮次过程排序

Status: implemented

[English](2026-08-26-stable-turn-process-order.md) | 中文

## 问题

Assistant 输出流式生成、成为最终正文，或因工具调用、Retry、后续步骤而失去正文资格时，轮次过程范围会变化。若既有 Chat Node 的排序依赖这段可变范围，首轮系统提示词和位于 User 之前的上下文会跨过开场 User，导致同一个逻辑行在轮次期间出现在不同位置。

## 决策

既有 Chat Node 在同一页面生命周期内保持同一展示顺序。其位置只依赖持久锚点、节点种类和开场人工输入，不依赖可变的过程起点或正文边界。加载更早历史触发依赖重放时，已经投影出的系统提示词保留原有锚点。新投影出的过程控件可以插入既有行之间；完成状态、Retry、后续步骤、分页完成与手动展开只改变可见性或增加新证据。

系统提示词独立于轮次过程：初始提示词始终显示在开场 User 上方，并且不会获得过程成员或过程隐藏状态。后续提示词若首次从不完整历史窗口投影，加载更早的请求历史后仍保留该位置。上下文注入仍属于过程内容。若上下文或其它潜在过程行的事件锚点早于开场 User，Chat 从首次投影起就将其展示在该 User 之后；过程控件出现后占据 User 与这些过程行之间的稳定位置。没有开场人工输入时，控件从首次出现起就位于最早的过程候选之前。

现有的[轮次过程折叠决策](../feature/2026-08-14-web-turn-process-folding.zh.md)继续负责成员关系、完成状态、持久化、焦点与分页行为；本记录仅取代其中“折叠系统提示词”以及“等可变范围纳入行后才调整 User 前过程顺序”的旧决定。

## 曾考虑的替代方案

**让系统提示词继续属于 Process，但保留原位置。** 不采用：位于开场 User 下方的 disclosure 会控制自身上方的内容，而且收起后会隐藏用于界定该 User 请求的整段指令。

**只排除系统提示词。** 不采用：位于 User 之前的上下文仍会随正文资格变化而移动，保留了同类视觉跳动。

**把过程行重新挂接到 disclosure 下。** 不采用：跨 React 父节点移动 keyed 行会重挂载有状态 renderer。

## 后果

稳定的首轮展示顺序为「系统提示词 → User → Process → 上下文及其它过程行 → 最终 Assistant」。因此，位于 User 之前的注入上下文展示顺序可能不同于原始事件顺序，但从首次渲染起保持不变。测试覆盖初始状态、过程出现、完成后默认收起、手动展开与仅正文边界变化的场景。
