AGENTS.md@shared-standards · git:20261008.6d88ad6 · 2026-10-08 · sha256 45139a44aa79f244

AGENTS.md@shared-standards git:20261008.6d88ad6A

Immutable. This exact content never changes and is served at /api/v1/blob/45139a44aa79f244.

# 工作原则与协作规范(AGENTS·项目组级)

> 本文件 = **项目组级公共规范**:位于 `project-group/shared-standards/`,被项目组内
> 各项目工作区**只读引用**(不随项目复制)。**开始任何任务前先读本文件。**
> 变更需用户确认;更新走提权通道(见 §8/§9)。
> 版本: v1.20 | 最近修订: 2026-10-08 | 变更记录见文末。

## TOP 规则(最高优先级,与其他内容冲突时以本块为准)

1. 未签目标书不立项;未批计划书不执行。
2. 一个单元=一个分支=一个会话;收单元七步打勾缺一不可。
3. 请示用户一律用提问卡片。
4. 闸没过完禁止进入下一单元。
5. 里程碑完成第一时间总结+推送到远端仓库。

---

## 0. 协作模式(用户-代理)

- **用户**:负责战略方向与重点细节抉择;提供账号注册与权限管理;
  有权驳回请求并给出指引。
- **代理**:负责执行与落地;工作区维护;遵守领域互联网工程规范。
- **工作流程**(每项任务必须走完):
  1. 先向用户了解工作内容与方向(不臆测,先问);
  2. 写出详细计划书:待执行步骤 + 验收标准;
  3. 严格执行,**不主动降级任务目标**;
  4. 完成后验收并向用户汇报。
- **被驳回时**:不辩解硬闯,思考备用方案再提出;用户有思路时遵从用户指引。
- **咨询方式**:咨询/请示用户时**优先使用提问卡片**(ask_user_question,带选项,
  推荐项标注),便于快速回复;复杂情况卡片 + 简要文字结合。
- **对话人话化**:对用户的一切回复/卡片/总结用普通陈述句——结论先行、一段只说一件事、
  句子说完整。五条:
  1. **禁裸序号**:不得用内部序号(S0、u6、A002、DECISION-7 这类代号)作主要称呼——
     用户记不住,这不是人类沟通。一律用有含义的名称/主题指代(如「平台可观测性」
     工作单元、API 定价那条假设);序号只用于文档内定位,对话中最多作括号补充。
  2. **说完整**:动词不省宾语——写「从社区仓库拉取代码」,不写「从社区拉」;不自造
     简称和外号——名词要能脱离当次对话被理解,指代一组事物时把名字列全。
  3. **标识符不翻译**:对话中出现的源代码标识符(包名、目录名、类型名、命令等)一律
     保留原文(如 `packages/core`、`loader`),中文只用于谈概念;把标识符译成中文会
     让用户去找一个不存在的名字。项目不含源代码时本条自然空转,不与任何条款冲突。
  4. **不说书腔**:不写对仗口号与警句体压缩句;比喻最多一个,且必须帮助理解。
     语气平实——不训人、不用反问句施压、不摆权威腔。
     信息正确不等于传达完成——用户一遍读完不费劲才算说完。
  5. **篇幅可伸缩(默认短答)**:结论放第一句;正文默认不超过 10 行;单句不超过 40 字,
     一句只说一件事,不靠逗号把多件事串成一句。长内容写进文档,对话里只留一行指针。
     不复述工具输出、文件原文与已做步骤的流水账。
     用户说「展开」「举例」「详细说」时放开行数,单句上限不变——详细体现在分点、
     例子与表格上,不体现在句子长度上。
  **适用范围**:以上五条只约束代理对用户对话的表达方式;交付物本身(文案、旁白、
  诗词、角色台词等)的文体按各项目自身规范执行,对话中整段引用交付文句不算违规。
- **对话中给用户的路径用当前系统的绝对路径格式**:Windows 系统写盘符 + 反斜杠
  (如 `C:\<任意目录>\<项目名>`),Linux/WSL 系统写斜杠路径(如 `/mnt/c/...`),
  一律用反引号包起,便于用户直接复制使用。运行系统属机器级事实:判定一次存入组级
  `user-config.toml` 的 `[runtime] path_style`(windows/posix),之后直接读档、
  不再逐次判断;仅当某项目从不同系统入口打开(如经 WSL)时,在项目级
  `project-config.toml` 同名条目覆盖(优先级沿用 §6:项目 → 组 → 卡片)。存量环境
  发现无记录时:判定 + 卡片确认后代填存盘,同样只存一次。本条只约束对话回复格式;
  文档/脚本仍按 §4 禁止本地绝对路径。
- **规范沉淀**:每次遇到"规则冲突/无规范可循"的情况,先查可查到的领域规范或
  咨询用户,然后归纳总结、把结论写入本文档或项目级 AGENTS/standards,形成积累。

## 1. 项目组定位

- 项目组:`<一句话项目组定位(例:AI 动画二创项目组)>`
- 成员项目:每个项目 = 一个**独立工作区**(与 shared-standards 同级的文件夹,
  由 `project-template` 复制改名而来,在 DSH 中单独打开)。
- 项目工作区按**三大类**组织:`inputs/`(输入素材)、`process/`(过程工程)、
  `outputs/`(输出产物);根级另有 `configs/`(**本地环境区**,不入库)与 AGENTS.md
  这一份文档(索引见项目级 AGENTS §3)。
- 各项目 `inputs/ai/reports/` 下调研报告 = **市场调研 + 可行性分析**,不是工程方案,
  不是事实来源。

## 2. 核心工作原则

1. **怀疑态度**:报告中的每个数字都当成"待验证假设",引用时必须标注假设 ID
   (见项目 `process/docs/assumptions.md`),不得直接作为事实写进方案。
2. **先问人,再搜网**:遇到无法判断或互相矛盾的信息,先问用户;用户不能准确回答时,
   上网搜索核实并附来源链接。
3. **实测优先**:涉及本机能力的结论,必须以真机实测为准;纸面估算只能作为预测,
   并在文档中标注 [ESTIMATED]。
4. **结论分层(强制范围)**:凡文档中出现数字、阈值、事实性结论,必须标注
   [MEASURED] 实测 / [ESTIMATED] 估算 / [UNKNOWN] 未知待定;涉及外部信息同时挂
   [ASSUMPTION-XXX];纯流程/导航性描述不强制。
5. **定价敏感**:所有价格类信息随时变动,立项前必须重新询价;促销价不代表稳态价格。
   **询价只看官方渠道**(官网定价页/官方文档/官方客服);第三方评测、自媒体文章、
   AI 生成内容一律不作定价与选型依据。
6. **引用文本保真**:产物中引用外部权威来源的文字——语法关键字、命令、接口名、标题、
   链接文本、版本号——必须**当场取自当前生效的权威源**(官方文档、目标文件本身),
   逐字照录,禁止凭记忆转写或自创简称;出货前以**产物本身**复验,复验手段按项目产物
   形态选定(渲染查看、编译执行、脚本抽查)。凭旧版本记忆书写规范、给链接编造别称,
   均属本条禁止项。

## 3. 已知不可靠内容(各项目登记见各自 process/docs/assumptions.md)

- 第三方价格评测、自媒体价格文章、AI 生成的价格/规格描述——不作定价与选型依据,以官方为准。
- `<项目组级已知不可靠内容,逐条列出>`

## 4. DSH 友好约定(工程协作格式)

- 所有文档:UTF-8(无 BOM)、Markdown、LF 换行。
  **换行靠仓库根 `.gitattributes` 强制**(`* text=auto eol=lf`,二进制类型单独标记):
  只用 `core.autocrlf` 不够——Windows 上它的行为是「仓库 LF、工作区 CRLF」,与本条要求
  不一致;`eol=lf` 覆盖它,使仓库与工作区都为 LF。新建仓库模板时随附该文件。
- 文件名:小写字母 + 连字符(如 `working-principles.md`),不使用空格和中文文件名。
- 行宽:正文每行 ≤ 100 字符(表格除外),方便逐行读取。
- 标记约定(可 grep 检索):
  - `[ASSUMPTION-XXX]` —— 引用项目 `process/docs/assumptions.md` 中的假设编号
  - `[TODO]` —— 待办
  - `[VERIFY]` —— 待核实(上网或问人)
  - `[MEASURED]` / `[ESTIMATED]` / `[UNKNOWN]` —— 结论类型
  - `[SOURCE?]` —— 缺来源
- 文件引用一律用相对路径。
- **落盘内容的通用性硬条件**:入库的一切内容须脱离具体项目、具体会话与具体领域仍可
  理解并执行——不得点名具体项目、引用某次会话原话、出现具体产物标题或本机目录安排,也不得
  写入只在单一技术栈或单一领域成立的做法;这类内容留在各项目自己的文档里。清洗、降级
  或改写掉的原委记入本文档变更记录表的"变更"列,条款正文不写。适用范围:写入本仓库的
  规约与模板。
- **禁止本地绝对路径**:文档/脚本中一律不出现用户本地绝对路径(如 `C:\...`、
  本地文件夹全名);引用一律用项目相对路径或中性描述(如 `process/project/scripts/ctx.cjs`)。
- **审计检查范围**:做全文一致性/残留检查(grep/扫描)时,**必须覆盖隐藏文件与
  .gitignore 排除的文件**(如 `*.env`、`.gitignore` 本身、`secrets/` 等)——曾因只扫
  可见文件漏检 `.env` 旧注释;扫描工具需显式包含隐藏文件,不依赖默认通配符。
- 修改现有文件前先 read;新增文件用 write;小改动用 edit。
- 不要生成超长单行;大文档按小节组织,便于 grep 定位。
- **多行/非 ASCII 参数走文件**:向外部程序传多行文本或非 ASCII 文本(如提交说明、
  配置正文)时,先写入 `process/tmp/` 临时文件,再用该程序自带的文件入参选项传入
  (如 `git commit -F <文件路径>`);不内联进单行 shell 命令。命令切换了工作目录时,
  注意临时文件路径的解析基准。
- **嵌入文本不手工拼接**:把文档正文作为字符串写进代码或工具参数时,使用所用语言原生
  的安全引用形式,不手工拼接转义;同一类引号/转义语法错误在同一会话出现两次,即停止
  重试拼字符串,改走上一条的文件传参路径。

## 5. 文件职责

| 层级 | 文件 | 职责 |
|---|---|---|
| 项目组级 | shared-standards/AGENTS.md | 本文件:项目组协作规范(只读引用) |
| 项目组级 | shared-standards/standards.md | 全局合规/工程规范与特色定制(横向) |
| 项目组级 | shared-standards/pipeline-and-roles.md | 多角色流水线(**可选能力**):角色与写权表、**闸→角色映射(§1.1,模板 `AGENTS.md` 有其投影)**、单元文件夹传送带、做多了三档(§3.1)、降级层级、并行纪律与收单元七步切分(§5.1);**启用多角色时读,单会话项目不必读** |
| 项目组级 | shared-standards/user-config.toml.template | 组级用户配置模板(实例 user-config.toml 本地填写,不入库) |
| 项目级 | configs/ | **本地环境区**:项目配置与密钥(模板入库、实例不入库);用户填,代理侧唯一写者=制作人 |
| 项目级 | AGENTS.md | 项目级规范 + 项目组级引用 + 三大类索引(唯一根级文档) |
| 项目级 | inputs/ | 一、输入素材(user/ 用户提供;ai/ AI 调研);本区自维护 README 索引 |
| 项目级 | process/ | 二、过程工程(tmp/ 临时;project/ 正式工程;docs/ 实例区;templates/ 模板区);本区自维护 README 索引 |
| 项目级 | outputs/ | 三、输出产物(按产物类型分组);本区自维护 README 索引 |
| 项目级 | process/docs/assumptions.md | 假设清单(新增假设在此登记;含 `验证时机` 列) |
| 项目级 | process/docs/measurements.md | 真机实测记录 |
| 项目级 | process/docs/decisions.md | 决策记录(ADR) |
| 项目级 | process/docs/HANDOFF.md | 会话交接(新会话必读);**含「用户职责表」**;多角色模式下变为静态路由器 |
| 项目级 | process/docs/progress.md | 进度看板(多角色模式下由制作人独占写) |
| 项目级 | process/docs/units/ | 单元文件夹(传送带):`brief`/`build`/`accept` 各由固定角色写 |
| 项目级 | process/docs/handoff/ | 每角色一份接续索引(多角色模式下的接续点) |
| 项目级 | process/docs/work-log.md | 工作日志(全路径,含反复修改/失败) |
| 项目级 | process/docs/construction.md | 施工文档(只记成功步骤) |
| 项目级 | process/templates/ | 文档模板区(`<名>.template.md` 永为模板;实例=复制到 docs/ 去 `.template` 后缀) |
| 项目级 | process/docs/plans/goal-spec.md | 目标定义书(立项闸产物;6 字段,签名后基本不再增长) |
| 项目级 | process/docs/plans/plan.md | 计划书与门禁表(规划闸产物;活文档,按里程碑分段) |
| 项目级 | process/docs/spec-proposals/ | 规约修订成文提案(§9 D1 流程;批准实施后合并删除) |

**必读文档的读取方式(新增文档必须先归入一类)**:

| 读取类别 | 适用文档 | 规则 |
|---|---|---|
| 覆盖写(有界) | HANDOFF.md、plans/goal-spec.md | 描述"当前状态"的单值文档,每次重写不追加,天然有界 |
| 尾 N 行 | work-log.md | 流水中取尾部,明写 N 的值(接续闸取尾 10 行) |
| 索引 + 按需展开 | decisions.md | 头部维护索引区、每条一行;正文按需展开,接续闸只读索引区 |
| 分段读 | plans/plan.md | 只读当前段的完整门禁表;已完成段看折叠摘要(§7.2) |
| 按字段筛读 | assumptions.md | 全文读「近期可实测」与状态未定的条目;其余按索引引用 |
| 按步骤清单执行 | construction.md | 按步骤清单逐条执行(前置条件/命令或脚本/通过判据),不读叙述 |
| 全文必读 | 两级 AGENTS.md | 规范类锚点;项目级的体量与指针约束见 §6 |

> 新增文档时无法归入上表任一类,先补一条读取规则,再建文件。

## 6. 通用工作规则与项目组特色定制

**通用:**
- 启动工程方案前:先过一遍项目 `process/docs/assumptions.md`,标出会影响方案的关键假设。
- **假设登记义务(A1)**:任何新调研/新数字产出时,**先登记假设,再引用**;调研报告交付的
  同时更新 `process/docs/assumptions.md`——登记条目 = 调研收尾凭证,未登记 = 报告不算交付完成。
- **验证时机分层(A1b)**:假设登记时标注 `验证时机`:近期可实测 / 上线后验证 / 仅参考;
  "上线后验证"类在里程碑复盘统一到期检查,到期未验证的补验证或降级为"仅参考"。
- **决策记录(A2)**:命中下列任一即当天记 ADR 到 `process/docs/decisions.md`
  (与 work-log 同节奏),状态机:提议 → 已批准/已驳回/已废弃:
  ①方向/边界/排除项变化;②指标口径或成功判定变化;③成本上限/预算哲学变化;
  ④技术选型变更;⑤平台集合/渠道变更;⑥影响 ≥2 个单元或跨里程碑。
  **登记人**:单会话模式下由该会话登记;多角色模式下**只有制作人登记**——实现者与验收员的
  发现写在自己单元记录里的「候选决策与候选假设」一节(A1 的假设登记也走这一节回交制作人),
  由制作人判断哪些升格成 ADR、哪些升格成假设条目
  (见 `pipeline-and-roles.md` §2、§5)。
- **新会话接续**:先读项目 `process/docs/HANDOFF.md` + `process/docs/work-log.md`,
  再开始工作;重大决策记入项目 `process/docs/decisions.md`。

**项目组特色定制(全局适用,各项目默认遵守):**
- **大文件下载规范**:凡需从外网下载大文件(模型权重等),一律由用户在主机执行下载
  (代理沙箱对大文件下载不可靠)。代理负责列出**下载表格**,每行至少含:
  `下载网址` + `下载后存储位置`(完整路径)。下载完成后用户告知,代理再继续。
- **选型规范**:一律选主流成熟方案,不选冷门小众的;除非双方共同确认现有效果不好,
  再由用户决定是否更换。自训微调产物除外。
- **提交习惯**:里程碑式成果或反复修改最终成功的大成果,第一时间总结
  (写进 work-log/decisions + 必要时施工文档),然后**提交 git = 推送到远端仓库**,
  不止本地 commit。真有问题再回滚或 fork 新分支。
- **资源约束**:本机资源紧张的任务不并行(以实测资源占用为准;冲突时由用户排定先后)。
- **施工文档约定**:交付版施工文档 `process/docs/construction.md` 只记录**成功实施步骤**
  (错改对的一步到位),使**换 AI/换工作目录也能从空文件夹复原当前项目进度**。
  ⚠️ 它与 **`process/docs/work-log.md`(每日实际施工日志,全路径,含反复修改/失败)是两份**,勿混。
- **重复动作脚本化**:同一动作第二次出现(人工/纸面重复操作、需复现的步骤),即落地为
  可执行脚本,放项目 `process/project/scripts/`,随 git 版本化。脚本须**可观测**:明确的
  入参/出参、日志输出、非零退出码标识失败。**日志分级**:
  - 关键结点(成功路径):阶段转换、入参摘要、中间结果——详细记录,不一句带过;
    后续若出现错误,之前的关键成功日志是排错推理的重要依据;
  - 常规过程(成功路径):简洁,不刷屏,不堆 debug 打印;
  - 错误路径:详尽——错误信息、触发上下文、当时输入状态,以"拿到日志就能排错"为目标。
  目的:减少模型重复推理、节约 token 用量、保证结果一致可复现;收单元验收时可用脚本
  复现替代口头描述。
- **项目级 AGENTS.md 的体量与指针化**:DSH 在**挂了注入模块的预设**里(标准/PTC/创造与自定义
  组合;极简模式的组合里没有这一模块,故不注入)把「用户全局 `AGENTS.md` +
  项目根到会话工作目录沿途的全部 `AGENTS.md`」作为一条基线消息注入,**上限 65536 字节**
  `[MEASURED]`(DSH `dsh-agent-instructions` 的 `maxBytes` 默认值);超出时先整体丢弃
  较宽的文件、最后才截断最具体的文件,并在会话里留 `Workspace instruction budget ...`
  通知。因此:
  - 项目级 `AGENTS.md` 的定位是**索引与指针,不是手册**;项目特有规则需要展开时,
    正文写进 `process/docs/` 下的独立文档,本文件只留一行指向它。参考上限:本文件
    控制在 20 KB 以内,余量留给沿途嵌套 `AGENTS.md` 与用户全局指令。
  - **组级规范不受此上限约束**——它在项目根之外,永不参与这条注入,故不设字节上限;
    它的成本是代理主动读取时的 token,读几次付几次。
  - **禁止把组级规范正文复制进项目工作区**(与 §8 只读引用同源):形成第二份副本
    即分叉起点,且会占满上面的注入额度。
- **并行前提(与上条资源约束配套)**:同一工作目录在同一时刻**只有一个活跃写入会话**
  ——`git checkout` 按工作目录生效(一个目录只有一个 HEAD),协作文档为追加或覆盖写,
  多会话并发会静默改变彼此的视图。需要并行时,先在计划书的单元定义里写明该单元
  预期触碰的文件与目录集合;两个单元的文件集不相交才可并行,相交即串行。
- **成本治理**:成本账目记 `measurements.md`(实测)+ `work-log.md`(每单元一行),
  不另开文档;预算总额在计划书(规划闸)确定;超预算 → 停止 + 卡片请示,不自动放行;
  询价结论先登记假设(状态=待询价),实测后转 [MEASURED]。
- **用户配置预留文件(两级,TOML)**:项目级 `configs/project-config.toml`(**本地环境区**:
  项目根 `configs/`,gitignored,**只含非密钥配置**:git remote、路径、偏好等)+ 组级
  `shared-standards/user-config.toml`(本地填写,.gitignore 排除,不入库;模板
  `user-config.toml.template` 入库)。
  **首次配置引导(不做开局体检)**:复制模板文件(**去掉 `.template` 后缀**)为实例文件
  并填写——组级 `user-config.toml.template` → `user-config.toml`;项目级
  `configs/project-config.toml.template` → `configs/project-config.toml`;未配置走空值
  逻辑/默认。**代理侧唯一写者=制作人**:判定与引导归它,复制可代建,**值一律由用户提供**
  (密钥由用户直接写入,不经提问卡片)。
  **配置需求点(四项,各自只触发一次)**:①第一次 git 远端操作前 → `[git] remote_url`;
  ②第一次 commit → git 身份(组级);③第一次真的要访问某平台 → `configs/.env` 的键名;
  ④第一次从不同系统入口打开 → `[runtime] path_style`。缺配置按下方空值逻辑走,
  但**引导发生在该需求点那一刻,不是开局**(项目模板 `AGENTS.md` 有一份同序投影)。
  **模板命名规则(统一)**:模板名 = 实例名 + `.template`;`.env` 这类点文件即
  `.env.template`。去后缀必须刚好得到实例名,不得把 `.template` 插在扩展名之前。
  **密钥统一存放**:平台 API 密钥等**只放 `configs/.env`**(gitignored;模板
  `.env.template` 入库),project-config.toml 不列密钥(见 standards.md §2)。
  **凭证分级**:运行令牌代理可读;支付/主账号类仅用户可见——代理**不得把它们转写进任何
  文档、总结、日志或交接文件**,只在会话内按需使用(见 standards.md §2)。
  **配置读取优先级:项目配置 → 组配置 → 卡片提示用户,由用户决定处理逻辑**。
  空值逻辑:`remote_url` 空 = 本地模式;git 身份项目未配 → 读组级 → 仍空 → 卡片;
  密钥空 → 对应功能不可用或卡片。
- **git 双模式**:远端模式(默认推荐:commit + push)与本地模式(仅本地 git,
  commit 即收尾)均合法,模式以 project-config.toml 的 `remote_url` 为准,
  会话中不留痕、不主动追问。**每次 git 操作前**先查 `git remote -v` 并向用户
  说明三问:①是否已设置远端?②是否仅提交本地?③是否已推送远端?——
  防止"以为推了其实没推"。commit 身份(user.name/email)取配置:项目 → 组 → 卡片。
- **里程碑复盘(D3)**:每里程碑(一轮 30 条优化闭环/单元组收完/用户指定)强制复盘:
  ①成功判定逐条打勾;②规约执行偏差清单(未遵守/写不清/执行不了);
  ③偏差 → 修订提案(走 §9 D1 流程);④纪要入 decisions + work-log;
  同时执行"上线后验证"假设的到期检查。
- **规则预算(新增规约的过滤器)**:新规则提案须附"防什么事故"说明(频率×损失);
  无法说明具体事故的不采纳或降为建议。TOP 规则与四道闸为锚点,不参与筛选。

## 7. 门禁执行规范(四道闸·可执行版)

> 目的:门禁靠物理动作执行,不靠自觉。每条含"触发条件/具体动作/通过凭证/失败默认动作"。
> **多角色流水线是可选形态**(见 `pipeline-and-roles.md`):单会话流程不受影响,
> 只有把同一项目拆成多个角色会话接力时才启用。

### 7.1 立项闸(新项目会话第一步,做完才能做别的)

1. 写项目 `process/docs/plans/goal-spec.md`,固定 6 个必填字段(缺字段不算写完):
   - `成品形态`:一句话 + 一段让没参与的人能看懂最终成品长什么样的描述
   - `质量上限`:标杆是谁(贴具体链接/图,不许写"高质量"这类形容词)
   - `质量下限`:什么样的结果不可接受(具体到画面/时长/观感)
   - `渠道与受众`
   - `成功判定`:列 3 条事后能打勾的指标
   - `排除项`:明确不做的事
   - 字段可以"**原则级 + [VERIFY] 占位**"签署(方向承诺与细节充实解耦),细节由调研阶段回填。
2. 用提问卡片把 6 字段逐一请用户确认,用户答"通过"=签名。
3. 未签名 → 禁止执行任何后续动作(含调研)。

**目标书修订分级**:
- **字段级变更**(成品形态/渠道与受众/排除项/成功判定结构等)→ 需回到本闸**重新签名**;
- **细节充实**(指标字典版本升级、阈值校准等)→ 用户确认 + 记入 decisions/work-log,
  不必重签。

### 7.2 规划闸(目标签名后)

1. 请用户开 /plan 模式;写计划书并附门禁表(每行固定 4 列:
   `触发条件 | 通过凭证 | 通过后做什么 | 未通过默认动作(停止+卡片请示)`),
   用 exit_plan_mode 提交计划。
   **格式定义与示例在同一小节、同一版本块**(示例不同步更新的修订不予批准)。
   示例行:
   | 触发条件 | 通过凭证 | 通过后做什么 | 未通过默认动作 |
   |---|---|---|---|
   | 单元 U1 验收 | 门禁逐条打勾 + 成果入 work-log/construction + commit/push + 用户确认"通过" | 进入 U2 | 停止 + 卡片请示(修改或重做) |
   | 里程碑 1 结束 | 验收标准逐条打勾 + 决策回写 + 复盘纪要 + 总结推送 | 进入里程碑 2 | 停止 + 卡片请示 |
   | 门禁表全部行完成(计划耗尽) | 目标书「成功判定」逐条打勾的结论 + 用户卡片答复 | 全打勾 → 结项(§7.7)或开新目标书(回立项闸);未全打勾 → 提交计划书增补并获批准后回执行闸 | 停止 + 卡片请示 |
   **分段与折叠**:门禁表按里程碑分段;已完成的段折叠成一行
   `里程碑 N:已完成 → 见 decisions 的 DECISION-XXX`,只让当前段保持完整 4 列。
   折叠是对计划书这一份活文档的编辑,不属 §7.3 禁止的"修改已提交内容"。
2. 计划书批准 = 用户在 /plan 里点批准;未批准禁止执行。

**决策↔计划书联动(A2b)**:
- 执行中决策:仅"影响验收标准/门禁表/指标口径"的决策须**当天同步计划书对应行**
  (1 行编辑);背景方向类决策只记 ADR;
- **里程碑收尾全量回写(A 操作)**:该里程碑期间全部决策(含背景类)统一落进
  计划书/门禁表,保证 decisions ↔ 计划书完全对齐;顺序:①决策回写 → ②里程碑复盘 →
  ③总结+推送(TOP 规则 5)→ ④计划余量检查。
- **计划余量检查(A 操作第④步,不可跳过)**:看计划书门禁表还有没有未完成的行,
  三个分支:
  - 还有未完成行 → 照原计划继续执行闸;
  - 已耗尽、但目标书「成功判定」未全部打勾 → **卡片提议续编计划**,附建议的下一期
    里程碑草案与门禁表新行草案;用户批准后回执行闸;
  - 「成功判定」已全部打勾 → **卡片提议结项**(见 §7.7)或开新目标书(回立项闸重签)。
- **目标书 : 计划书 = 1 : N**:一个目标书可对应多期计划书。续编计划的入口判定直接
  复用 §7.1 的「目标书修订分级」,不新增闸:
  - 不触碰目标书 6 个字段 → 只过规划闸(提交计划书增补,exit_plan_mode 批准);
  - 触碰字段级内容(成品形态/渠道与受众/排除项/成功判定结构)→ 回立项闸重签。

### 7.3 执行闸(每个工作单元循环)

- 工作单元定义写在计划书里,格式固定:"一个可验收产出"
  (例:一个模型训练完成并通过验证)。
- **单元命名**:`u<序号>-<kebab-case 主题>`(小写+连字符),如 `u1-platform-observability`;
  分支 = 单元名;会话名 = `<单元名>-<YYYYMMDD>`。
- 开单元:`git checkout -b <单元名>` + 新开会话,会话名=`<单元名>-<日期>`。
- 收单元七步(逐条打勾,缺一不进入下一单元):
  1. [ ] 对照计划书门禁表逐条验收打勾
  2. [ ] 成果写入 process/docs/work-log.md(表格一行)
  3. [ ] 成功步骤写入 process/docs/construction.md
  4. [ ] `git commit`(信息规范见下)
  5. [ ] `git push origin <分支名>`(远端模式;本地模式仅 commit,模式记入 HANDOFF)
  6. [ ] 提问卡片问"单元 X 验收通过?[通过/修改]",用户通过才收
  7. [ ] 提议切新会话(见"切会话分工")
- **commit 信息规范**(Conventional Commits 结构):
  - 首行:`<type>(<单元名>): <一句话成果>`,如
    `feat(u1-platform-observability): 7平台可观测性核实+指标字典v1.1`
  - type 固定集:`feat`(新成果)/ `fix`(修复)/ `docs`(文档)/ `refactor`(重构)/
    `test`(测试)/ `chore`(杂务/脚本/配置)
  - body:单元收尾类提交**必写**(验收要点、关联 DECISION/ASSUMPTION 编号);
    简单 chore 可省略
  - footer:GitHub 联动(`Fixes/Closes #N`)可选
- **上下文检查**:每个收尾检查点(单元收完/里程碑/长会话中途)运行上下文占用查询脚本
  (项目 `process/project/scripts/ctx.cjs`),占用 ≥60% → 走切会话收尾流程。脚本按会话身份
  定位数据,两条来源依次尝试:①DSH 原生投影缓存(`session_projcache`,与 DSH 界面上的
  上下文计量环同一数据源、同一口径);②会话日志。**判据口径**:占用 = `projectedTokens
  ÷ contextWindow`,即"下一次请求的提示词预估长度",与界面上那个百分数看得是同一个数;
  日志来源只能给"上一次请求的实际长度",两者同一时刻有一两千 token 的差,**不要混用**。
  窗口一律取自会话记录里路由声明的真实值;两条来源都拿不到时脚本非零退出,此时改由用户
  看界面上的计量环读数(代理看不到界面)。
- **切会话分工**:
  - 代理(收尾方):停手 → 更新 HANDOFF/work-log/decisions → git 提交 → 卡片提议 +
    给出"**新会话第一句话**"(可复制文本);
  - 用户(接续方):新建会话窗口 → 发第一句话 → 新会话自动走接续闸。
- 强制切会话触发条件(任一命中即停手、卡片提议切会话):
  - 一个单元收完;当日已完成 ≥2 个单元;上下文占用 ≥60%(代理自测或用户提醒);
    用户说收工
- **等待用户确认期间**(收单元第 6 步、卡片请示):
  - 允许做"非冲突工作":不依赖该决策的独立准备(下一单元调研、文档整理、无冲突脚本化);
    非冲突工作**有界**——完成一项可验收的独立准备即回到等待;无非冲突工作时停止,
    不制造无效工作(不为填时间硬找事做);
  - **禁止**:开新单元、修改已提交内容、任何越闸动作(闸没过完不进下一单元);
  - 跨会话无回复:用户收工/新会话开始时,HANDOFF 记"挂起事项 + 等待的决策点 +
    恢复路径",下个会话从该点继续。

### 7.4 接续闸(新会话第一步,固定顺序)

1. 读 process/docs/HANDOFF.md → 2. 读 AGENTS.md TOP 规则 →
   3. 读 process/docs/work-log 尾 10 行 + process/docs/decisions 索引
   → 4. 读 process/docs/plans/plan.md 的当前段门禁表(执行闸每步对照它,缺了没法判闸)
   → 5. 判断当前处于哪道闸、过闸凭证是否齐全,不齐先补。

### 7.5 文件职责补充

- 项目 `process/docs/plans/goal-spec.md`:目标定义书(立项闸产物,
  6 字段模板见 §7.1),任何项目立项前必写。
- 项目 `process/docs/plans/plan.md`:计划书与门禁表(规划闸产物,见 §7.2),
  执行闸每步对照它、接续闸读它的当前段;目标书与计划书为 1 : N 关系。

### 7.6 调研阶段(可选,立项与规划之间)

> 不是第五道闸,是轻量阶段;目标书细节已明确、无需调研的项目可跳过直接进规划闸。

- 触发:目标书签名后、规划闸前;需要充实目标书细节或为计划书铺路时进入。
- 范围:"信息收集"类——平台可观测性、标杆池、互动基线、成本询价、合规核实等;
- 边界:**禁止工程实现**(不写代码、不搭系统);所有数字须登记假设(A1)
  并标注结论分层;
- 退出凭证:调研报告交付 + 假设登记完整 + 用户确认调研结论;
- 失败默认:停止 + 卡片请示(未知项转 [UNKNOWN]/[VERIFY],或由用户提供)。
- 产出物:调研报告入 `inputs/ai/reports/`;结论按修订分级回填目标书;登记假设。

### 7.7 结项闸(目标达成后的终态)

> 触发:目标书「成功判定」3 条全部打勾(通常由 §7.2 A 操作第④步的计划余量检查发现)。

1. 逐条打勾目标书「成功判定」,结论写入 work-log;
2. 全量回写:decisions 的未闭合项标记终态(已批准/已驳回/已废弃);
3. 产出归档:`outputs/` 定版;施工文档 `construction.md` 定版(按 §6 只留成功步骤);
4. 总结 + commit + push(并入 HANDOFF.md 与 decisions.md 书面记录);
5. 卡片请示:**结项** 还是 **开新目标书**(开新目标书 = 回立项闸,重写 goal-spec);
6. 结项后本工作区转为只读归档;要再动,开新目标书。

> 计划耗尽但目标未达成时**不结项**,走 §7.2 A 操作第④步的续编计划分支。

## 8. 依赖与更新规则(项目组级 ↔ 项目级)

- **引用**:各项目工作区的 `AGENTS.md` 第 0 节声明依赖本文件
  (相对路径 `../shared-standards/AGENTS.md`)。
- **新项目创建**:复制 `../project-template/` 到本文件夹同级(project-group 下)
  并改名,以**独立工作区**在 DSH 打开;`../shared-standards/` 相对路径自动成立。
- **只读**:本文件夹对各项目工作区只读(项目代理的写权限只覆盖本项目工作区);
  项目不得把规范复制进工作区形成双份。
- **更新**:本文件夹规范由用户主导更新;代理需要更新时走**提权通道**——
  对越界写操作申请一次性权限并说明理由,经用户批准后执行。
- **优先级(两档制)**:
  - TOP 规则为最高优先级,**不可被项目覆盖**(动它们需用户主导);
  - 其余组级条款为**默认值**:项目可覆盖,但须在项目级 AGENTS §2 显式写明覆盖条款
    与理由;覆盖若具通用性,走提权通道回写组级,不留隐性分叉。

## 9. 规约修订流程(D1)

> 规约自身的修改流程。入口:**反作用专用会话**——要分析/修改规约时,开一个专用会话
> (先读规约 → 分析完整性 → 讨论确认 → 按本流程落地);日常干活会话不混入规约修改。

1. **提案**:修订动议。简单修订(单文件、文字级)会话内确认即可;复杂修订
   (跨文件、机制级、影响面大)写成文提案 = 现状问题 + 拟改条款原文 + 影响范围
   (组级/项目级/模板层),放项目 `process/docs/spec-proposals/`;
2. **批准**:用户确认。组级修订**必须用户明确批准**(代理只提案、不推动);
   项目级修订用户确认即可;
3. **实施**:项目级 = 工作区内直接改;组级 = 提权通道改 shared-standards
   (发布/同步到远端由管理员自行决定执行);
4. **版本化**:被改文件版本号 +1(见文末变更记录);
5. **变更记录**:记入文件内变更记录表;含示例的条款必须同步更新示例
   (作为批准环节校验项)。变更记录须写明该条**为何具备通用性**(防什么事故、为何不
   只对单一场景成立);说明不了的不落盘。通用性本身的判定属批准环节——组级按本流程第 2 步
   由用户确认,代理只提案、不推动。

## 变更记录

| 日期 | 版本 | 变更 | 批准 |
|---|---|---|---|
| 2026-08-27 | v1.0 | 首次版本化:调研阶段(§7.6)/目标书修订分级/决策↔计划书联动/脚本化+日志分级/成本治理/git 双模式/里程碑复盘/规则预算/修订流程(§9)/优先级两档制/结论分层强制范围/询价限官方/门禁表示例/切会话分工/commit 规范/上下文检查/敏感信息(standards) | 用户 |
| 2026-08-27 | v1.1 | git 双模式改为预留文件填写机制(process/project/configs/git-remote.md,会话中不留痕);standards 同步 | 用户 |
| 2026-08-27 | v1.2 | 配置预留文件升级 TOML 两级:project-config.toml(项目)+ user-config.toml(组);配置读取优先级=项目→组→卡片;空值逻辑;standards 同步 | 用户 |
| 2026-08-27 | v1.3 | 组级 user-config.toml 移至 shared-standards/(.gitignore 排除);模板 user-config.template.toml 入库 | 用户 |
| 2026-08-27 | v1.4 | §4 新增「禁止本地绝对路径」:文档/脚本一律相对路径或中性描述 | 用户 |
| 2026-08-27 | v1.5 | §9 实施步骤措辞弱化:移除"回写 starter 仓库"通用表述(会话限定行为,非项目常驻义务),改为"发布/同步由管理员自行决定" | 用户 |
| 2026-08-27 | v1.6 | §6 用户配置条款补「首次配置引导」:复制模板(去 .template)为实例并填写 | 用户 |
| 2026-08-27 | v1.7 | §5 文件职责表补 templates 模板区(方案丙落地:docs 实例区 + templates 模板区) | 用户 |
| 2026-08-27 | v1.8 | §6 修正:密钥统一 configs/.env(toml 只含非密钥配置),消除 .env 与 [secrets] 双轨重复 | 用户 |
| 2026-08-27 | v1.9 | §4 新增「审计检查范围」:一致性/残留检查须覆盖隐藏与 .gitignore 文件(教训:.env 旧注释漏检) | 用户 |
| 2026-09-01 | v1.10 | §0 新增「对话人话化(禁裸序号)」+「对话路径按当前系统绝对路径格式」:对话回复禁用裸代号;路径按运行系统写可复制绝对路径;`path_style` 机器级判定一次存入组级 `user-config.toml`,项目级同名条目可覆盖(两个配置模板均已加字段;文档/脚本仍按 §4) | 用户 |
| 2026-09-08 | v1.11 | §0「对话人话化(禁裸序号)」更名为「对话人话化」并由单条扩为四条(禁裸序号/说完整/标识符不翻译/不说书腔)+ 补「适用范围」声明;§2 新增第 6 条「引用文本保真」;§4 新增「多行/非 ASCII 参数走文件」「嵌入文本不手工拼接」两条。防的事故(频率×损失):对话中用裸代号与自造简称导致用户反复追问(每会话数次,直接拖慢决策);产物引用凭记忆转写导致返工与错误扩散(跨里程碑复发,损失为整篇复验);引号与转义冲突导致同类语法错误反复重试(同会话三次,损失为上下文与时间)。清洗说明:条款正文不含成员项目名、会话原话与具体产物标题,事故经过只记本表;单一语言/工具特有的写法不入模板 | 用户(2026-09-08 会话按 diff 逐条批准后落盘) |
| 2026-09-16 | v1.12 | 补闭环与通用性:§7.2 A 操作加第④步「计划余量检查」+ 目标书与计划书 1 : N + 门禁表末行「计划耗尽」与分段折叠;§7.4 接续闸补读计划书;§7.5 补 plan.md;新增 §7.7 结项闸;§5 计划书行拆分 + 新增必读文档读取方式分类;§6 新增项目级 AGENTS.md 体量与指针化(含 DSH 注入上限 65536 字节 [MEASURED])、并行前提,并统一模板命名规则(模板名 = 实例名 + `.template`,三个配置模板改名回归该规则,standards.md 同步)。防的事故(频率×损失):计划耗尽后无后继规则、代理只能停下等用户提(每个项目末期必发,损失为项目停摆与用户记忆负担);接续闸不读计划书导致闸位判断缺据(跨会话每次);协作文档无读取限量导致长项目里逐次全文读(每个项目末期必发,损失为 token 与判闸速度);模板名与实例名的推导规则不自洽导致代理复制错方向(每次首次配置,损失为配置失败) | 用户 |
| 2026-09-16 | v1.13 | §4 换行条款补落地机制:新增仓库根 `.gitattributes`(`* text=auto eol=lf`,二进制类型单独标记),并写明为何只用 `core.autocrlf` 不够——Windows 上它是「仓库 LF、工作区 CRLF」,与本条要求的 LF 不一致;`eol=lf` 覆盖它。防的事故(频率×损失):规范要求 LF 而工作区实际长期是 CRLF,同一文档在不同机器/不同会话里换行不一致,合并时出现整文件 diff(每次在 Windows 上提交都发生,损失为无意义的 diff 与逐行比对失效) | 用户 |
| 2026-09-16 | v1.14 | 补通用性硬条件与批准环节校验:§4 新增「落盘内容的通用性硬条件」(不得点名具体项目、引用会话原话、出现具体产物标题或本机目录安排,不得写只在单一技术栈/领域成立的做法;清洗原委只记变更记录表);§9 第 5 步补「变更记录须写明为何具备通用性,说明不了的不落盘」,并明确通用性判定归批准环节、代理只提案不推动。**为何通用**:本条管的是"往开放模板里写什么",与具体领域无关,任何用该模板的团队都需要;它填的是既有机制的缺口——§6 规则预算只过滤"值不值得立",§8 只处理"项目能否覆盖",都不管"这条脱离本场景是否还成立"。防的事故(频率×损失):实例域内容(真实平台名、单一领域产物目录等)渗进开源模板,使用者继承不适用的假设(每建一个跨类型项目必发,损失为开局返工) | 用户 |
| 2026-09-16 | v1.15 | 新增**可选能力**:多角色流水线(独立成文 `pipeline-and-roles.md`,本文件只留指针)。§5 文件职责表补该文件与三个新项目路径(`progress.md`/`units/`/`handoff/`);§6 A2 决策记录补「登记人」——多角色下只有制作人登记,实现者与验收员的发现写在自己单元记录里由其升格(消掉原条款对所有角色的"邀请",避免与角色边界冲突);§7 声明多角色为可选形态、单会话流程不受影响。防的事故(频率×损失):长会话里角色边界被工具结果裁剪吃掉,导致实现者/验收员去写制作人的共享文档并静默覆盖(引入多角色后必发,损失为记录丢失与返工);多会话并发写同一批文件(引入并行后必然发生,损失为返工) | 用户 |
| 2026-09-18 | v1.16 | §0「对话人话化」由四条扩为五条:第 4 条补「语气平实」(不训人、不用反问句施压、不摆权威腔);新增第 5 条「篇幅可伸缩(默认短答)」——结论放第一句、正文默认 ≤10 行、单句 ≤40 字、一句只说一件事、长内容写进文档、不复述工具输出与已做步骤的流水账,并给「展开/举例/详细说」留放开行数的入口(单句上限不随展开放开)。**为何通用**:篇幅约束只作用于代理对用户说话这一层,与项目领域无关;换模型只换一种啰嗦法,说明缺口在指令层而非模型层,任何用该模板的团队都受同一问题困扰;默认值与放开入口成对出现,故不牺牲需要细说的场景。防的事故(频率×损失):默认输出过长导致用户反复重读或要求二次解释(每会话数次,损失为阅读时间与决策速度,且随会话累积) | 用户 |
| 2026-09-19 | v1.17 | **更正一处说过头的话**:§6「项目级 AGENTS.md 的体量与指针化」原写"DSH 每次会话开局注入",实测不成立——预设的组合就是它自己那份组合文件点名的插件(0.2.1 起该文件为预设声明里的 `config.plugins`,见 `presets/`),极简模式(`minimal`)的组合里没有注入模块,故**完全不注入**(标准/PTC/创造与自定义组合都有这一行)。现给注入加限定"挂了注入模块的预设"。连带:§5 文件职责表的 pipeline 行补上「闸→角色映射(§1.1,模板有其投影)」「做多了三档(§3.1)」「收单元七步切分(§5.1)」三项新内容;§6 A2 的「候选决策」一节扩为「候选决策与候选假设」,与 `pipeline-and-roles.md` §2 同步(A1 的假设登记在实现者侧的出口)。**为何通用**:本条只更正"工具能力"的事实描述,与项目领域无关;任何用该模板的人都需要知道"哪一层真的会到场",否则会把规矩写在到不了的地方。**防的事故(频率×损失)**:按"任何预设都会注入"设计约束落点,导致极简模式下整套文档约束一句都不生效而使用者毫不知情(每次有人换模式一次,损失为静默失守);A1 与 §6 A2 两处措辞不一致导致实现者不知该在哪登记(每次实测出数,损失为假设漏登或被越界写) | 用户 |
| 2026-10-08 | v1.18 | §7.3「上下文检查」补全数据来源与判据口径:占用值改由 DSH 原生投影缓存读取(与 DSH 界面上的上下文计量环同一数据源、同一口径),会话日志降为兜底,并写明脚本非零退出时改由用户读界面计量环。**为何通用**:本条只管"怎么量一个百分比",与项目领域、产物类型无关;量法依赖的是 DSH 自身的公开投影,凡是按本模板建的项目都跑在同一套机制上。**防的事故(频率×损失)**:原条款只说"运行查询脚本",未写口径与来源,而同一时刻"下一次请求预估"与"上一次实际长度"相差一两千 token(本机实测 26.51% vs 26.54%、10.71% vs 10.84%),照错的那个判 60% 会过早或过晚切会话(每个收尾检查点都在,损失为一次多余的切会话或一次超阈值继续跑);脚本原先依赖一个已被 DSH 删除的环境变量,无参运行必然失败而条款仍写着"运行脚本"(一直静默失效) | 用户 |
| 2026-10-08 | v1.19 | **预设分发方式随 DSH 变更**:预设不再是「复制文件夹到 DSH 预设目录」,而是一个**组合包**(bundle),装进 profile 后在选择器里出现三条独立声明(制作人 / 实现者 / 验收员)。连带更正:v1.17 变更记录里"预设的组合就是它自己 `agent.cordis.yml` 点名的插件"引用的是已不存在的文件名,改为按当前机制表述(预设声明里的 `config.plugins`)。**为何通用**:本条只更正"预设从哪来、怎么装"这一机器事实,与项目领域无关;任何用该模板的人都要按当前 DSH 的方式装角色预设,否则照旧文档装不上。**防的事故(频率×损失)**:按已失效的目录复制法操作,三个角色预设装不上且选择器里不出现,使用者以为是自己操作有误(每个新使用者必发一次,损失为开局卡住与反复排查) | 用户 |
| 2026-10-08 | v1.20 | 项目配置从 `process/project/configs/` 迁到**项目根 `configs/`**,列为第四类「本地环境」(模板入库、实例不入库):§5 文件职责表加一行;§6 路径改两处、补「配置需求点」四项(什么时刻需要什么、谁引导谁写、**不做开局体检**)、补「代理侧唯一写者=制作人」、凭证分级补「不得转写进任何文档/总结/日志/交接文件」。**为何通用**:三大类分的是"内容"(材料/过程/产物),配置实例是"运行环境",任何用本模板的项目都会撞上同一件事——位置决定归属,而 gitignored 文件的越界在 diff 里看不见。**防的事故(频率×损失)**:配置埋在工程产物区导致写权归属靠位置推断而非判定(每个新项目一次,损失为越界争用与反复裁定);用户不知道要手动复制模板去后缀,项目静默走本地模式、密钥到用时才发现(每个新项目一次,损失为返工与"以为推了其实没推");仅用户可见的凭证被转写进文档或总结(每次有人把密钥拿出来讨论,损失为泄露面扩大) | 用户(2026-10-08 会话批准提案后落盘) |