# Prompts Module Rules

## 范围与职责

适用于 `src/host/prompts/`。

**所有提示词正文集中在 `texts/`**：一个注入场景 = 一个文件 = 一段从上到下的完整正文。
本目录的其它 `.ts` 只做「事实 → 模板变量 → 渲染一次」，不存放正文片段，也不做跨文件拼装。

维护入口与变量语法见同目录 `README.md`（需要修改提示词时按需阅读）。

## 维护方式

- **改提示词 = 直接改 `texts/` 下对应文件的正文**；不要再把正文拆成小段、用常量互相引用拼装。
- **允许不同场景的正文重复**：原「共享措辞与锚点单一源、变体之间不复制模板」约束已废除——
  它是组装化的成因，维护成本高于重复成本。
- 变量用 `{{name}}` 标出；可选段用 `{{#if name}}…{{/if}}`（支持嵌套）；列表类内容由调用方先渲染成一段文本再传入。
- 模板文件头必须写明：适用场景、注入位置（system prompt / 用户消息 / 工具返回 / 消息投递）、变量表。
- 父代理三模式（纯编排 / 编排+自执行 / 纯执行）各一份独立文件，不用条件分支互相套用。

## 组装与依赖

- 构建器是纯计算：入参即全部输入，同入参必同输出；渲染结果不得残留 `{{`（渲染器会抛错）。
- 本模块处于依赖链末端，不反向依赖运行时模块。

## 测试

- **正文与文案常量不做测试断言**：提示词会频繁修改，断言文案会让维护成本反噬。
- 只测机制与结构：渲染器行为（变量、可选块、残留检测）、数据是否进入输出、模式与通道差异、渲染幂等。
- 禁止为了通过测试而把正文片段抄进断言。

## 核心原则

1. 正文集中在 `texts/`，一场景一文件；打开文件即见完整全貌。
2. 组装退化为一次渲染，不拼小段。
3. 允许重复，换取可读与可维护。
4. 纯函数：无时钟、无随机、无 IO、无隐式全局状态。
5. 正文不进断言。
