Files
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

346 lines
44 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DSH 平台项目 — 项目指令(每次会话自动加载)
> 🔴 **当前结论(先读 · 最后更新 2026-09-30 05:56)**
> · **文档记录规则**(用户 09-30 定):**最新结论放最前** · 历史**倒序** · 只留最近 5 轮(**教训/用户定案原话/实测读数**三类**豁免**)· 超出的**归档**(⛔ 不删)⇒ 规范 `session-mechanism`(内 `references/作业规矩/00-作业总规矩…md`)§1.7a;归档落 `$WS/归档/`,**按类别分**(索引见 `$WS/归档/README-索引.md`)。
> · **协作机制**:唯一权威 ⇒ `~/.workbuddy/skills/session-mechanism/references/architecture.md`(其头部有「当前结论」节);⛔ `交付物/` 里 4 份"多会话协同"平行件 **2026-09-30 已退役**,⛔ 不作用判据。
> · **取现状**:⛔ 不拿旧文档/旧实测单当现状 —— **先按 mtime 取最新那份**(同上技能 §1.7b);⛔ 也不拿"任务图节点 done"当"判据通过"。
> 🔧 **PY**=`E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe` | **WS**=`E:/ProgramData/AIProject/ai1net-dsh-server` | **DOC**=`D:\github\dsh_shenxian\dsh-server-docs` | 脚本目录 = `$DOC\07-scripts`。
> 📎 **【详】**=`$WS/docs/规则与载体/规则详解_红线与实证_20260924.md`(各条**解释段 / 历史 / 实证 / 命令全文**,章节 §A–§H);⛔ **冲突以本文件为准**。
> ⚠️ **章节顺序按注入优先级排**(🔴 DSH 侧**按 `maxBytes` 预算注入,默认 65,536 B**,**不是「只取前 8,000 字符」**;超限时**先丢整份宽泛文件、再截断最具体文件**)⇒ 实体章排前 · 指针章排末尾(清单见下)。
**⛔ 动作前必须执行的三条**:① **先跑状态**(1 次调用顶十几轮探索)`"$PY" "$WS/state.py"`(`--online` 加远端基线)—— **跑完之前不许 Glob/Grep 全库摸底**|② **改文件之前先"抢"锁**(不是"检查")`bash $DOC\07-scripts/handoff-guard.sh --claim-exec "<会话名>"` —— **抢到之前不要动文件**,抢不到 = 停手(判据 ⇒ §6)|③ **推送前** `bash scripts/docs-sync-check.sh`(对账)+ `PUSH=1 bash "$DOC\07-scripts/handoff-guard.sh"`(**幽灵文件硬判定**)。
### ⛔ 分层判定标准
> 不看会致「违规 / 事故」⇒ **必须实体**;只是"更慢更绕" ⇒ 可只给指针。**必须实体**:头部 · 本文 · §1 · §3(红线全表)· §4 · §5 · §6。**可只给指针**(2026-09-24 用户拍板:§7 §8 转引用):§2 · §7 · §8 · §9(卫生 + 目录规范合并章)—— 背景知识 / 环境命令 / 事故详解 / 档案模板 / 历史方案。
> 加载序:DSH 全局 `AGENTS.md`(`$DSH_HOME/AGENTS.md`)→ 本文件 → `.codebuddy/rules/*.md` → 文档库。🔴 **改本文件下一请求即生效**(⛔ 不必重启;只有 hook / profile / preset 才需**完全重启**)。两层冲突的裁决 ⇒ 全局 `AGENTS.md` **§11**(含两条例外:DSH 宿主机制判据不可被本层覆盖;两套锁各管各的域)。
---
## 1. 提问判据(唯一一条)
> **只问「超过现有判断方法边界」的问题。**(用户原话)
- **边界内 ⇒ 自决,不要问**:技术选型 / 实现路径 / 命名与数据结构 / 调参 / 部署与同步 / 排查方法 / 版本依赖 / 兼容降级 / 方案取舍 / 文档技术内容。**「部署上线」属此项 ⇒ 做完即上线,不要问**;生产变更**直接做**、只需**动手前一句话说明**(判据 ⇒ **R8**;详 A1/A2)。
- **边界外 ⇒ 必须问**:① 业务目标与优先级 ② 花钱与资源承诺 ③ 对外承诺 ④ 需用户提供的凭据或审批 ⑤ 无客观优劣的偏好 ⑥ 影响面超出本平台 ⑦ 红线门禁 ⑧ 判不准。
- 🔴 **讨论技术不谈法规**:⛔ 不引条文当论据 / 不提合规风险 / 不写进方案与验收判据;**只在你问起、或对象就是"对外承诺 / 资质 / 合同"时才谈**(详 A3)。
- **判据**:有没有**客观可判的优劣**?有 ⇒ 自决,没有 ⇒ 问。**上抛门槛 = 存在真取舍**:候选**只有优点或只有缺点 ⇒ 自己拍掉**;各有优劣才上抛,且**逐项写优点 + 缺点**(详 A4)。
- ⛔ **不许捆包**:要问红线**只问那一句**;技术方案自己定好、当**已定项**陈述。
- ⛔ **禁用征询句收尾**(「要我…吗 / 请确认 / 你看怎么办」)⇒ 按三问重判(真门禁?已定的事又问?真取舍?),没命中就**删掉、自己做完**(详 A5)。
- 🔴 **上抛 / 待拍板内容必须自包含(发送前就按规范写)**:⛔ **作用域 = 一切「要用户拿主意」的输出**(提问 · 末尾待拍板清单 · 候选 · 表格盘点 —— 换形态不豁免)。四要素:① **问题** —— 一句话说清要决定什么(⛔ 不用指代)② **说明** —— 为什么要你定("影响谁 / 断多久 / 花多少钱")③ 每候选写**优点 + 缺点**,末行给**倾向** ④ 一轮一问;🔴🔴 **决定对象必须点名**(要撤哪份文件 / 要改哪个技能 / 推哪个仓 / 动哪台机器 —— 少了它用户就没法回答);⛔ 只把**只服务实现**的内部细节(函数名 / 变量名 / 行号 / sha / 表名字段名 / 内部编号「R5 红线」这类)下沉「技术附录」。🔑 **一句判据:少了这个标识,用户还能不能决定** —— 不能 ⇒ 必须写进正文,能 ⇒ 必须删(2026-10-09 实测:把要撤的文件抽象成「那两份」⇒ 用户回「不说具体 我怎么知道」⇒ 该条**作废**)(详 A6)。
**📐 回复排版(🔴 2026-10-01 用户定稿 · 本条覆盖旧版;六轮迭代后定下,照抄即可,⛔ 别自己另发明)**
- **骨架**:`# 大类`(**已完成** / **待处理任务**)分节 → `## 任务名` 分事 → 每件事写两段:**当前状态** + **待处理事项**。
🔴 **大类标题必须比任务名大一号**(2026-10-01 用户加)—— 大类别用**一级标题 `#`**、字号最大;任务名用**二级标题 `##`**;⛔ 不许大类与任务名同号(同为 `##` ⇒ 层级压平、看不出哪几件事属于同一个大类)。
- **当前状态**:每条一个**圆点**(`- `),**用一句陈述句说重点**;复杂情况、依据、细节放**句末圆括号**里。
- **待处理事项**:用**序号**(`1、2、3、`,不是 `1.`);每条写完整句子,可以不止一句。
- **附件**:本板块若有文件要展示或引用,写在**该板块最末**一行(`附件:<路径>`)。
- **大类顺序**:**已完成的大类放最前**,`待处理任务` 放**最后**。
- **三禁**:⛔ **表格**(=省略讲理,人要来回跳读)|⛔ **长散文**(不是写小说,整篇不分段=没版式)|⛔ **碎标签堆叠**(`- ` 碎片 + 加粗小标题 + `⇒` 串句)。
- 🔴 **强遵循(2026-10-02 · 机制保障见 `session-mechanism` 技能(内 `references/作业规矩/`))**:本节=**每轮硬约束**,命中三禁任一条 ⇒ 该条回复**作废重写**。机器可读副本由技能注入在下方标记块;**每轮注入**由钩子 `reply-style-guard.py` 承担;本环境侧另有逐字探针(`resident-rules.py --check`)。
- 🔴 **用户原话(五条 · 每次纠正改一版,合起来才是完整口径)**:
①「**为什么回复的内容 那么人机 把我都看抑郁了,禁止用表格,全部用文字排版**」
②「**不是只用句子就行了 要排版 不是让你写小说**」
③「**排版不清晰,要有大标题小标题 小标题 多项要段落排版**」+「**段落还有序号**」
④「**当前状态:内容如果有多条情况 按无序段落排版**」+「**圆点符号 无序段落每个段落前要加**」+「**当前状态 每个段落用 一句陈述句说重点,有复杂情况可以放在末尾()中**」
⑤「**如果有对应附件需要展示或引用 放在对应板块 最后**」
⑥「**已完成 待处理任务 这些大类别 用更大字体标题**」(2026-10-01 12:12)
- ⚠️ 本条**只管「给人读的回复」**;注释/日志/解析用字段不受限(给程序读的随便)。
- 🎯 **要解决问题,不将就妥协**(降级 / 延期 / 静默兜底**都不算解决**);🟢 **只做正向迭代**(= R11)(详 A8)。
- 🔀 **冲突裁决序**:① **R8** → ② **§1 边界内自决清单** → ③ **其余红线**(R5 / R7 / R9 / R10 **永远硬约束**);⛔ **冲突 ≠ 门禁**。**上抛前必答三问**:对象是我们自己的资源吗?查证过关键不确定点吗?第一名明显更优吗?任一"是" ⇒ 自决(详 A9)。
---
## 1.5 项目开发 · **任务执行关键步骤**(🔴 每次会话必须遵循 · 跳步=违规)
> 🔴 **每个会话、每个任务都按本顺序走;⛔ 不准跳步、⛔ 不准"边做边想"。**
> 📖 **全文(逐阶段动作、命令、判据)⇒ `$WS/交付物/项目开发-任务执行关键步骤-20260929.md`**(本节省 = 实体精要,冲突以本文为准)
### A 开工三件(🔴 **首选=一行入口** · 下列原三步=**入口内部实现**,⛔ 不必手敲)
🔴 **首选**(把原三步合进 **1 次调用**,2026-10-01 起):
`"$PY" "$WS/scripts/dsh.py" open "<会话名>" <目标文件...>`
⇒ 入口内部依次跑:① `state.py` ② `preflight-lock.sh` ③ `handoff-guard.sh --claim-exec … --domains ai1net-dsh-server/`
⇒ ⚠️ **必须带目标文件**(不带 ⇒ 入口**跳过**第②步 preflight);入口 rc≠0 ⇒ **停手 + 报告**(R9)
🔴 **两条例外(入口做不到 ⇒ 手动)**:
· 目标文件命中 **【E】机制层**(`CODEBUDDY.md` / 钩子 / 技能文件等**全平台共用**的)⇒ 必须**独占**:`bash $DOC\07-scripts/handoff-guard.sh --claim-exec "<会话名>"`(⛔ **不带** `--domains`);抢不到 ⇒ 停手
· 工作域**不是** `ai1net-dsh-server/` ⇒ 手敲 `--domains <你的域>/`
(以下 = 入口内部实现,逐字保留供排查对照;**语义未变**)
1. **跑状态**:`"$PY" "$WS/state.py"`(`--online` 加远端基线)—— 🔴 **跑完之前不许 Glob/Grep 全库摸底**(1 次调用顶十几轮探索)
2. **判可锁定范围**:`bash $DOC\07-scripts/preflight-lock.sh "<会话名>" <目标文件...>` —— 【D】未归类或【E】机制层非空 ⇒ **rc=1 拒开工**
3. **抢锁**(是"抢"不是"看"):`bash $DOC\07-scripts/handoff-guard.sh --claim-exec "<会话名>" [--domains <域>]` —— ⛔ 不带 `--domains` = **退化为独占**(机制层必走)|**抢不到 ⇒ 停手 + 报告**(R9)
🔴 **默认一律带 `--domains <本工作区域>/`**(如 `ai1net-dsh-server/`);⛔ **别图省事省略** —— 省略 ⇒ **全局独占** ⇒ **别人连域锁都抢不了**(2026-09-29 实测:`482f3cd4` / `9368300d` 两次中途停手,**皆因我持了全局独占锁**)。
⇒ **只有真正"全平台共用"的改动**(`config` / `crypto` / `isolation` / 锁与钩子**本身**)才用独占。
### B 六阶段(先 → 后 · 每个阶段只列"卡门禁"的那几步)
| 阶段 | 关键动作 |
|---|---|
| **0 需求识别** | ① **开工前置检查**(先看可用技能列表 ⇒ 有对应**立刻 `Skill(...)`**;再看本机/项目已有资产;装任何东西前自问「**已有的能否满足**」)② 环境盘点 ③ **分清「方案请求」vs「直接执行」** ④ 关键分叉用选项表 |
| **1 调研** | ① 🔴 **报障第一步:先拿真实失败请求**(`journalctl` grep 4xx/5xx,**别猜**)② 只读官方包定位机制(⛔ 不写官方主程序)③ **实测 > 推断** ④ **双端 md5 对账** |
| **2 规划** | ① 方案对比表(≥2 项 + 利弊 + 建议)② 🔴 **红线 R1–R11 逐条自查** ③ 影响评估(命中 R5 另附「权限影响评估」)④ `04-调整方案/` **原子占号**建档 |
| **3 开发** | ① 小步:**读一条 → 改一条 → 验一条** ② 覆盖前**先备份** `bak-<功能>-<日期>/` ③ `npm run build`(零报错)→ `systemctl restart dshs` ④ 本机直连验证 |
| **4 验证** | ① 用例**必须同时覆盖「有请求体」与「无请求体」**(只测 POST 会漏掉 GET/SSE)② 浏览器**只用 `browser-harness`**,**第一步 `list_tabs()`**(不是你开的浏览器 ⇒ 立刻停手)③ 🔴 **交付前必问「出厂了吗」** |
| **5 归档清理** | ① **交付门禁**(见 C)② **四件套(顺序固定)**:`docs-audit` → `docs-index-stats --write` → `docs-manifest` → `docs-sync-check` ③ **三层沉淀**:治本(skill/档案)/失误(append-only 教训)/记忆(`AGENTS.md` 或工作区规则)④ 改技能时**本机 → 服务器单向推** + md5 双端一致 |
### C 交付门禁(阶段 5 §0 · 逐层自问三句)
「这次改的是**哪一层**?这一层的**生效链路**是什么?最后一步走了吗、**在用户可见面验了吗**?」
⛔ **四条"自我安慰"一条都不算交付**:本机改完了 / build 通过了 / 本地打包完成 / 已 commit 了。
### D 收尾五件(缺一不算完成)
🔴 **首选=一行入口**(只合并 ①+清单提醒,2026-10-01 起):`"$PY" "$WS/scripts/dsh.py" close "<会话名>"`
⇒ 入口内部:`--release` → `--release-exec "<会话名>"`,并打出 ②③④ 的清单提醒(⚠️ 提醒 ≠ 代做:**②~⑤ 仍须本会话逐条做完**)
① **反序释放锁**(入口内部实现):`--release` → `--release-exec "<会话名>"`;⛔ 不带名 ⇒ 拒释放 ② 台账 / 档案 ③ **提交边界**(未明确要求 ⇒ 不 commit/push;**只 add 自己改的**;⛔ `tmp/`/中间产物/会话交接单 不入库)④ **收口清本棒 `tmp/`**
⑤ 🔴 **【收尾自判】**(2026-09-29 加,**同日按用户意见修正 —— 去掉了自造的去抖协议**):本棒做完后,**顺手**做这一步(⛔ **不是"去叫一个监管会话"**,不产生任何新会话):
1. **抢域锁当单例**(**既有工具,⛔ 不要自造 `mkdir`/flag**):`--claim-exec "<会话名>" --domains ai1net-dsh-server/`
⇒ **抢不到 ⇒ 什么都不做**(说明已有人在推进)—— **这就是天然去抖**。
2. 抢到则:**读** `automation_runs`(宿主已把各线结论写好)+ `tmp/supervise-inbox/advance.md` ⇒ **判「我这条线」还有没有缺口** ⇒ **有则写下一行 `automations`**(= 派下一棒)⇒ **释放锁**。
🔴 **为什么这样才对**:**你(这个会话)本来就在跑**,多花 30 秒判定即可 —— **零额外角色、零额外会话**。
旧设计"每线收尾各叫一次监管"会起 N 个会话互抢锁(2026-09-29 实测到"抢锁失败停手"),**已作废**。
🔴 全局收敛(V1–V7 全过)/ 线停滞重派 ⇒ 交给**心跳**(时钟由**常驻投递**提供)判 —— ⛔ **不再用宿主排期当钟**(2026-10-01 废弃);⛔ 不必在这里做。
🔴 为什么不能靠钩子:**钩子开不了新会话**(自动化才是唯一通道)。派活模板 ⇒ `交付物/多会话协同机制-定稿-20260929.md §4.1`|顶层设计 ⇒ `交付物/多会话协同-顶层设计-20260929.md`
🔴 **结束语必须对锁状态负责**(写明"已释放",或点名锁在谁手上 + 原因 + 下一步)。
### E 常驻的精确边界(⛔ 别一刀切)
- 🔴 **先记定案**:**「协作与投递一直运行(常驻)」**(09-29 定案,**2026-10-01 用户再确认**;理由「**可能不是所有队列都是钩子产生的**」)
⇒ ⛔ **不得拿"进程数 0→1"去否它**;⛔ **「自动任务当闹钟」方案 2026-10-01 已废弃**。载体 ⇒ 见末条。
- ⛔ **禁的是「会干活的会话自己起后台任务」**:输出会**反复唤醒宿主会话** ⇒ 会话永不空闲 ⇒ 用户看到"卡死"(已复现 6 次);
且它**会压制该会话的 idle 钩子**(实测压 6h20m)⇒ 一切"钩子驱动的唤醒/监管"被无声掐死。
- ✅ **独立进程不在禁令内**:在**独立窗口 / 计划任务**里跑、**输出不接回任何会话** ⇒ 不唤醒宿主 ⇒ 是项目明列的**正确用法**。
- 🔴 **但独立进程有一道过不去的坎**:它**不是 WorkBuddy 的后代 ⇒ 读不到 `CODEBUDDY_GATEWAY_PASSWORD`** ⇒ **不能用网关派活**(同 G-C)。
⇒ 独立进程**只能做只读判定 / 告警**;**派活仍须由能拿口令的一方(会话/自动化)完成**。
- ⇒ 🔴 **想要"能投递的常驻",本机唯一可行 = 专用容器会话 + 宿主后台任务 + `stdout` 全重定向到文件**
(`detached` 活不过工具调用边界;`schtasks` 被黑名单硬拦)。要加**别的**常驻,仍先过
`交付物/多会话协同-顶层设计-20260929.md §7` 判据(是"更早发现"还是"更早推进"?**后者它做不到**)。
### F 🔴 新建自动化 = **白名单 + 确认制**(2026-09-29 用户明令)
**只有两类可以不经确认直接建**:
1. **接续会话** —— 把某条链/某一线的**下一棒接上**(含 §1.5 D⑤ 收尾自判、把断掉的链续上)
2. **给其他会话安排任务** —— 派活
🆕 **第 3 类(2026-10-01 用户明令):开工建齐「唤醒 + 按分工类别的协作 + 跟进」三类会话**
> 用户原话:「**开始会话完成需求的时候,主会话需要创建 唤醒会话 以及根据分工类别 创建 协作会话
> 和 跟进会话呢 不然整个机制跑不起来**」
- **它属于"用户当场点名的动作"** ⇒ ⛔ 不算 §F 要防的「自行创建」。
- 🔴 **三条硬约束**(细则 ⇒ 技能 `session-mechanism` 的 `architecture.md §2.3.0d`):
① **只有自动化能开新会话** ⇒ "建会话"=**登记一条自动化**,⛔ 不是自己 spawn;
② 标题必须 **`[角色]-[类别]-<具体>`**,**第 2 级带方括号**、值取 `goal.json` 的 **`topics`**
—— ⛔ 用 `short` ⇒ `parse_session_name()` 认不回 ⇒ 会话**静默漏管**(§2.3.2 表 ④ 实测踩过);
③ **"还没建"是正常态**(唤醒会话随需求确定时才建),但**一旦开工就必须建齐**,看板上如实显示成灰 ○。
- ⚠️ **只建这三类** —— ⛔ 别顺手再加监管轮/巡检/定期体检(§F 底部那条反面教材就是这么来的)。
- ⚠️ **建齐 ≠ 机制跑起来**:投递链(常驻投递)与主会话可响应另算(见 §1 常驻定案)。
🆕 **第 4 类(2026-10-02 用户明令):缺会话 ⇒ 自动拉起**
> 用户原话(逐字):「**是用户说 使用协作会话方式 完成目标 或 继续完成目标**」(触发面)
> + 前一句:「应该是…**如果没有 相关会话就自动拉起**」
- **触发**:用户说上面那两句(等价说法「继续执行」也认)**或**队列堵住(投递报 `follow-not-live`/`no-follow-session`)。
- **动作**:先查齐备度 ⇒ **缺 ⇒ 就建排期把它拉起来**,⛔ **不许**把"你去开一条会话"甩给用户
(旧行为=写 `NEED-USER.md` 喊人开会话,**本条取代它**)。
- **判据 + 现成参数**:`python <技能包>/scripts/collabd.py --gap [--json]`(**只读**)。硬缺=**跟进/协作**会话没有活着的;
**唤醒**会话算"软缺"(用户定性「随需求确定时才创建」⇒ ⛔ 不算硬缺,否则红多必聋)。
- 🔴 **建排期只能由「会话」做**(脚本写 `automations` 表=双红线)⇒ "自动"的全部通路=
钩子把缺口**注入会话**(`wb-result-hook.py::maybe_inject_session_gap()`,`UserPromptSubmit` 零 token)⇒ 会话用 `automation_update` 建。
- ⚠️ **只建"缺的那三类会话"**,⛔ 别顺手加监管轮/巡检/体检。细则 ⇒ 技能 `session-mechanism` 的 `architecture.md §2.3.0g`。
- 🔴🔴 **跟进会话=全局唯一席位,⛔ 不按类别各建一条**(2026-10-02 13:5x 用户订正,逐字:「**跟进会话只创建一个,
跟进的内容来自 协作会话执行完成 后 把 待核对状态 写入 协作队列,上报给那个 固定的 跟进会话处理**」)
⇒ 一个工作区从头到尾**只应有 1 条**跟进会话;协作/唤醒仍按类别各一条。协作会话收尾=把**待核对状态**
写进协作队列 ⇒ 交给那固定的一条跟进会话核对并上报,⛔ 不是再开一条跟进会话。
⇒ **其余一切用途**(监管轮/巡检/检查点/定期体检/观测/清理/日报…)**必须先取得用户确认**,⛔ **不得自行创建**。
🔴 **执行方法**:建之前先自问「**这属于「接续会话」或「派活」吗?**」
- **是** ⇒ 直接建(一句话把"为什么属于这两类"写进名字或报告)
- **否** ⇒ **先把方案+理由报给用户,等确认**(⛔ 不许先建后报)
⚠️ **反面教材(2026-09-29 我犯的)**:为"定期检查"自行加了 5 个密集检查点 + 心跳 + 交代轮 ⇒ 用户:「**啥都用自动任务**」。
⇒ 判据:**看见自己"用建自动化来回应需求"时 ⇒ 先走本白名单;答不上就报给用户。**
✅ **删冗余/清理不属"新建"** ⇒ 可直接做(但要在报告里说明删了什么)。
---
### G 🔴 阈值到达 ⇒ **自动开接续会话**(2026-10-01 用户定则 · 固化)
> 用户原话:「**到达阈值后 继续对话自动创建接续会话处理**」
>
> 🔴 **时机(2026-10-01 用户补定 · 与阈值同等硬)**:
> 用户原话:「**在任务处理的最后 在判断创建会话的事, 不允许在任务中途处理**」
> **一句判据**:**「建会话」是收尾动作,⛔ 不是中途动作** —— 只有**手头这件事做到头**
> (做完,或达成停手条件:撞阈值 / 受阻 / 需用户拍板)时,才判「要不要开接续会话 / 协作会话」;
> ⛔ **任务进行中一律不许碰它**:不许中途建、不许中途改它的排期、⛔ 更不许中途"为它腾时间"。
> ⚠️ **反面教训(2026-10-01 实测)**:会话开到一半就把接续会话排到 30 分钟之后「给自己腾地方」,
> 结果任务提前做完 + 本会话又撞日志上限 ⇒ 那 30 分钟**纯空等**(用户当场追问「为什么要等这么久」)。
**三条阈值,命中任一即触发**:
1. **上下文用量** —— 本会话上下文 **≥ 220,000 token**(🔴 **用户 2026-10-01 改值**,原 36,000 **作废**)。
用户原话:「**上下文取值 220K,另一个会话在解决 日志写入过快的问题**」。
🔴 **为什么放到 220 K(而不再是 36 K)**:宿主的历史是**追加式全量重发**(一次工具调用的输出**永久留在历史里、每轮重发**)
⇒ 越晚换会话单轮代价越高,但**换得越勤则重启开销越多** —— 原 36 K 之所以定得极小,是因为**日志先撞**
(日志 ≈375 KB/分 ⇒ 28 分钟撞 10 MiB,比上下文早 19 分钟);🔴 该瓶颈现已由**另一条线专治「日志写入过快」**
⇒ 本线**不再按日志反推小阈值**,改按"少交接"取向定 220 K。
⚠️ 宿主在 **120 K** 会告警 —— 该点**低于** 220 K ⇒ 只当**中途提示**(可开始留意,⛔ 不必交接)。
2. 🔴 **会话诊断日志(两档 · 主阈值)** —— `logs/<日期>/sdk/conversations/<本会话 id>.log` 的**字节数**
(`os.path.getsize` 即可,⛔ 不 grep 内容 ⇒ 否则判定本身拖慢会话):
**软档 ≥ 5 MiB** ⇒ **开始写交接材料**;**硬档 ≥ 8 MiB** ⇒ **立刻停手 + 按本节建接续会话**。
🔴 **2026-10-01 用户拍板升格**(用户原话:**「B方案」**)—— 本档由"安全兜底"**升为主阈值**,⛔ 不再是"日后再议"。
🔴 **为什么硬档是 8 MiB 而不是 10**:宿主上限 10 MiB,须留交接余量;**实测一次交接烧 ≈1.9 MiB**
⇒ 8 MiB 已是**下限**,⛔ **不得再往上调**(调到 9 以上 ⇒ 交接材料写不完就撞顶)。
🔴 与 `collabd.py` 的 **9.5 MiB「已哑」拦截线**是两回事:那道只管"哑了不许再投",这道管"**该交接了**"。
🔴 宿主对单会话诊断日志有 **10 MiB 硬上限**,撞上即**拒写(EPERM)⇒ 界面静默哑掉**;
而协作程序过去对它的投递**仍记 `ok:true`(假绿)** ⇒ 通知全落空而无人知晓。
(2026-10-01 实测坐实 + 已修:`collabd.py` 增 `_deaf_sids()` 两道闸,见 `memory/2026-10-01.md` §十一)
⚠️ 换算参考(**仅参考 · ⛔ 不作判据**):正常干活会话日志约 2~3 MB / 20 分钟 ⇒ 5 MiB ≈ 35~40 分钟的量。
3. 🔴 **工具调用次数(两档 · 与日志同源 · 2026-10-01 用户拍板「B方案」一并采纳)** ——
本会话**累计工具调用**:**软档 ≥ 200 次** ⇒ 开始收尾;**硬档 ≥ 250 次** ⇒ 停手建接续会话。
🔴 **为什么它比 token 更准**:**日志量 ∝ 调用次数**(实测 **152 帧 × 244 B ≈ 37 KB/次**)⇒
`10 MiB ÷ 37 KB ≈ 283 次` = 一个会话的**物理寿命**(实测撞顶会话 264 次 ⇒ 吻合)⇒ 250 次已留余量。
⚠️ 与档 2 **互为冗余**:调用的"次数失控"(同一条命令爆几十次)与"单次输出过大"两条路都能被兜住。
📂 阈值设计全过程 ⇒ `memory/2026-10-01.md` §二十四 / §二十七 / §二十九;接续包 ⇒ `接续包_日志事前叫停_20261001.md §4`。
**触发后四步(顺序固定)**:
1. ⛔ **不在原会话里继续硬撑**(硬撑只会触发上下文压缩、或把日志写爆);
2. **先落盘交接材料**:结论 + 遗留 + 下一步 ⇒ `.workbuddy/memory/<日期>.md` 追加一节,或写接续包;
3. **开接续会话**:走 `automation_update`(🔴 **自动化是唯一能开新会话的通道**,钩子开不了);
属 §F 白名单「接续会话」⇒ **免确认**;prompt 必须**自包含**(新会话看不到本对话),第 0 步写「跑 `state.py`」;
4. **在本会话明确告知用户**"已交接,请到新会话继续",并**释放锁**(⛔ 带锁结束 = 把所有人挡在门外)。
⚠️ **触发时机**:以**用户下一条消息到达时判定**为准(钩子 `UserPromptSubmit` 本就会注入机械摘要 ⇒ 顺手带上"本会话已到阈值"即可)。
🔴 **钩子侧自动检测**= ✅ **已落地**(2026-10-01)—— 载体 `07-scripts/session-log-guard.py`,
挂 `PostToolUse` + `UserPromptSubmit`(宿主**支持 `PostToolUse`**,配置在 `CODEBUDDY_CONFIG_DIR/settings.json`);
只判 `os.path.getsize` 的**字节数**,⛔ **不 grep 日志内容**(否则判定本身拖慢会话);同会话同档只报一次
(状态落 `tmp/`,**临时文件 + `os.replace`**,⛔ 不用文件锁)。⇒ **软/硬档到达时你会收到一条注入提醒**
(`🟡` / `🔴`,出现在工具结果里)—— **看到即照本节第 1–4 步办**,⛔ 别当背景噪音忽略。
🔴 ⛔ **不许为此建"定时轮询式自动化"** —— 那属 §F 白名单外的用途,须先报用户。
### G·1 🔴 压日志增长的四条硬纪律(2026-10-01 实测口径 · 与本节同源)
> **为什么单列**:日志是**主阈值**,但"知道该交接"≠"知道怎么别涨那么快"。每条都有本机实测支撑。
1. **⛔ 分母不许估** —— 报任何"每次 / 每分"系数前,**分子分母都要量出来**。
(2026-10-01 我拿"估的调用次数"当分母,把一个系数报大了 3 倍 ⇒ 实测 166 次,我估的约 50 次。)
2. 🔴 **压调用次数是唯一直接杠杆** —— 日志 ≈ **调用次数 × 37 KB**(实测 144 帧/次 × 249 B)。
本机实测:某会话 **8 分钟跑 166 次(≈20 次/分)就写掉 6.2 MB**(参考会话 10.5 次/分 ⇒ 慢一半)。
手法:**合并命令一次取多个读数**|大输出 `> tmp/x.txt` 后只读关键行(⛔ 不 `cat` 大文件)|
⛔ 不 `ls -laR`|同一文件**一次读完**|让脚本内部聚合、只 `print` 摘要。
3. ⛔ **别用"挂钟时间"估算余量** —— 实测:活跃 **630 KB/分** ↔ 空闲 34 分钟 **0 行**(日志只跟"工具在跑"走)。
4. ⛔ **不许动生产日志一字节**(不改 / 不删 / **不重命名**)—— 它由宿主进程持有;
Windows 上重命名会被占用挡住,且**轮转是否发生由宿主决定**(⛔ 不改官方主程序 ⇒ 属上报项)。
---
## 3. 红线 R1–R11(任一条命中 ⇒ **先停手**;效率论证不构成豁免)
| # | 禁令 / 判据 |
|---|---|
| **R1** | **不自动升级 dsh** —— 升级须走独立"测试 → 评估 → 修复"流程 |
| **R2** | **不改官方 dsh 主程序与缓存** —— `@deepseek-ai/dsh` **零改动**;扩展只走 profile 层官方插件机制 |
| **R3** | **client bundle 禁 `exports.default`** —— 只导出 `apply` + `inject` |
| **R4** | **不用真实账号测登录** —— 用临时 session(`mksess.cjs` 直插),用完即删 |
| **R5** | **权限只准收窄** —— 凡**扩大**(新挂载 / 放开遮蔽 / 暴露平台目录或 env / 放宽 nft / 提档位)⇒ 先出「权限影响评估」并取得确认 |
| **R6** | **先查已有资产再动手** —— 可用技能 → 本机 / 项目已有技能与记忆 → "本机已有的能否满足" |
| **R7** | **禁未经确认的批量 / 全仓写入** —— 只做被明确要求的事;额外发现**先报告后动手**;禁全库遍历·通配符改写 / 批量权限·换行符改动 / `cp -r` 覆盖 / `git add -A`;**>10 文件 ⇒ 先出清单 + 确认**;**本机不是沙箱**(scp 会传导到生产) |
| **R7-边界** | **R7 只管「不是我的 lane」**:**我 lane 内细节**(部署 / 重启 / 改配置 / 跑自己的脚本 / 改自己的插件)⇒ **直接做,⛔ 别拿 R7 挡箭牌去问**;**别人的 / 归属不明** ⇒ **只报告、不动手**。🔑 判据看**归属**,不看"是不是平台组件" |
| **R8** | **生产变更**:`47.77.182.89` 是**开发环境服务器** ⇒ 重启 / 停 scope / drain / 改配额·env / nginx·nft **直接做**。两条自律:**动手前一句话说明**在动什么 + **不可逆操作**(删数据 / 迁 DB / 清目录)**先报清单** |
| **R9** | **⛔⛔ 禁止「人工删锁 / 接管」** —— 不得删 `交接单/.exec-lock` / `.doing-*`、不得以「持有者疑似已死 / 卡住」为由**单方面接管**;锁**只能由持有者自己释放**(guard 那句「或确认接管后人工删锁」**不构成授权**)。**抢不到锁唯一合规 = 停手 + 报告用户**(**处置权只属用户本人**)。<br>🔴 **唯一例外(用户 2026-10-09 明令授权)**:「如果 工作区 项目机制 对应的会话**异常** 导致未解锁的情况下,可以授权 **检查会话自解除孤儿锁**」—— 判据不再靠猜,`sessions` 表查**持有者真身状态**:**只有** `terminated`/`error`/`archived`,或 `completed` 且已静默 ≥30 分钟 ⇒ 判**孤儿锁**可解除;`working` ⇒ **一律不动**(R9 原样)。✅ 唯一执行面=`session-mechanism/scripts/lock/orphan-lock.py`(⛔ 别自己写删锁命令);⛔ 该例外**只给检查会话**、**只覆盖这一种情形** |
| **R10** | **⛔ 绝不以 root(或非该实例 uid)运行 / 触碰用户实例的东西** —— ① 验证 / 冒烟 / 探针**必须以该 uid 运行**或进 bwrap 沙箱,⛔ **禁 root 直跑 profile** ② 确需 root ⇒ **收尾必** `find <home> -user root -exec chown <uid>:<uid> {} +` ③ 实例起不来**先看属主 / EACCES,别先怀疑 OOM** |
| **R11** | **⛔ 只做正向迭代** —— 判据(十维:目标 / 方向 / 架构 / 功能 / 性能 / 安全 / 交互 / UI / 便利性 / 扩展性):是否让**任一维净变差**?**命中 ⇒ 立即停下复盘**:写清劣化在哪维、代价多大 → 找**保住正向收益**的做法 → **拿不出 ⇒ 立即停止、只报告**。⛔ 禁三种伪装:说成"必要代价" / "后续再优化" / 藏进交付不写 |
> **R5 / R7-边界 / R8 / R9 / R10 / R11 的解释段 · 事故全过程 · 用户原话 ⇒ 【详】§B-1…§B-5。**
---
## 4. 提交边界
**未明确要求 ⇒ 不 commit / 不 push / 不同步仓库**;用户说了才做,且**只 add 自己改的文件**。⛔ **三类禁止入库**(2026-09-21 用户明令):`tmp/` |**中间产物**(`_tmp_seq*/`、`_中间产物*/`)|`$DOC\05-交接单/` 下的**会话交接单**。
- ⛔ **别用 `git status` 判"交接单要不要提交"**(被 ignore ⇒ 不出现,属**预期行为**);确需入库只能显式 `git add -f` 并说明理由。⚠️ 已跟踪的 `05-交接单/README.md`、`archive/**` 不受影响。
- ✅ **落点与入库解耦**:交接单**照旧写** `05-交接单/`(8 段模板不变)只是**不进 Git**;中间产物**一律留 `tmp/` 内**。🔴 **提交前自查** `git diff --cached --name-only` 出现三类中任一 ⇒ **立即 `git reset`**。
## 5. 规划与执行分离
规划会话**只产出交接单**(`$DOC\05-交接单/`,8 段必填:目标 / 只读前置 / 范围 / 决策点 / 步骤 / 验收 / 回滚 / 回报格式),**不 ssh、不改码、不重启、不 scp**;落地交另一个执行会话(**不读其上下文**)。
## 6. 并发纪律(多会话并行是常态 · 命令与实证全文【详】§C)
- 共享文件**只用 Edit 精确片段替换**(失败 = 天然冲突检测),**禁整文件 Write 覆盖**。**并行度按「冲突域是否重叠」定**:域不重叠 ⇒ **可真并行**;⚠️ **机制层(`config`·`crypto`·`isolation`·`index`·`scripts`·`CODEBUDDY.md`·锁与钩子本身)必须独占**。
- **🔒 开工门禁**:先跑 `bash $DOC\07-scripts\preflight-lock.sh "<会话名>" <目标文件...>` 判可锁定范围。【A】可独立锁 /【B】秒级独占 /【E】机制层 /【C】共享 /【D】未归类。⛔ **【D】或【E】非空 ⇒ `rc=1` 拒开工**(D = 先归类再动;**E = 机制层全平台共用 ⇒ 仅当确认无其他会话在跑才可独占开工**)。
- **三把锁 + 两把秒级锁**(全文【详】§C):**域锁**(默认)`--claim-exec "<会话名>" --domains <域键>`,域键 = `<锚点段>/<下一段>`、多个用逗号|**不带 `--domains` ⇒ 退化独占**(**机制层必走**)|`--claim`|服务器侧 `op-lock.sh claim`;秒级 `--claim-skeleton`(改机制层 / 领迁移号)、`--claim-publish`(commit / push / scp / build)。**完工一律反序释放**(先 `--release`,最后 `--release-exec "<会话名>"` —— ⛔ 不带会话名 ⇒ **拒绝释放**)。🔴 **域键判据 shell 与 hook 两侧必须逐字一致**(`_ANCHOR_SEGS` ⇄ `_DOMAIN_SEGS`),⛔ 改一侧 ⇒ **域锁静默失效(假绿)**。
- 🔍 **抢锁必须"校验结果"不能"看输出"**:① **检查退出码**(不接管道)② 复读 `.locks/<会话名>/DOMAINS` 或 `.exec-lock/OWNER` **并断言是自己的**。⛔ 用 `| grep` 截尾 = **grep 吃掉退出码,也吃掉"抢不到"**。⚠️ `rc=1` 两因分清:域冲突(**停手**)vs `.gate` 占用(**重试**)。⚠️ **「无锁」=「你快去抢」**;⛔ **抢不到就是终点** ⇒ 处置见 **R9**(等释放或报告用户)。
- ✅ **锁只约束「写」不约束「读」**(读文档 / 读码 / 只读命令随时可做);⚠️ **会改本地状态的命令不算"读"**(`git fetch`/`checkout`/`stash`/`reset`/`switch`)⇒ **要持锁**。🔓 **释放时机 = 交付闭环走完**(台账 → 四件套 → commit → 推送 + 对账 → 归档),**不是"改完就放"**(释放一律带会话名:`--release-exec "<会话名>"`,⛔ 不带名 ⇒ 拒绝释放);**要等用户拍板 ⇒ 先释放再等**。🔒 **锁的生命周期 = 任务的生命周期**,⛔ **禁"抢到锁、做一半、不解锁就结束回合"**。**结束语必须对锁状态负责**(写明"已释放",或点名锁仍在谁手上 + 原因 + 下一步)。
- 推送前复跑对账:**「仅本地」里有不在你清单的文件 ⇒ 立刻停手**(幽灵文件);基线数字**必须带取数时间 + 复核命令**。
- **`settings.json` 的 `hooks` 段 = 多会话共享** ⇒ **只能 Edit 增删条目,禁整段覆盖**(覆盖顶层键 = 静默抹掉别人的钩子);**用户级 `MEMORY.md` 同理**。⚠️ **hook =「会话启动时快照」**(对在跑的会话无效 ⇒ 须**完全重启**,**关窗 ≠ 退出**);⚠️ **脚本路径失配 = fail-closed**(Write/Edit 全被拒)⇒ 迁移 / 改名后**第一件事 = 核对 hooks 绝对路径**;兜底 **钩子不拦 Bash**。
## 7. 环境要点(反复踩过 —— 加完就删旧的 · 全文【详】§D)
> ⚠️ **本机 bash 的 PATH 常丢**(`ls`/`grep`/`dirname` not found、rc=127)⇒ **每条命令都要前置** PATH 导出(`PortableGit/versions/1.2.0` 下的 `usr/bin` + `mingw64/bin` —— **`mingw64/bin` 不能少,`git.exe` 只在那里**;⛔ 别把 `/c/Windows/System32` 放前面);🔴 **调用间不共享 shell 状态**(命令全文 ⇒ 【详】§D)。
> ⚠️ 其余六条(转 LF / Node 22 / 禁 `py_compile` / pnpm / 会话取证 / 推送核验)⇒ **全文【详】§D**。
## 8. 会导致事故的实测事实(6 条速查 · 详解 ⇒ 【详】§E)
> 🔴 **速查(详情 + 后果 ⇒ 【详】§E)**:① 权限档位只在开会话时播种 ② 插件「禁用」= 真卸载 ③ 配额 384 MiB / V8 堆按宿主算 ④ 业务插件只走门户候选池 ⑤ home 写文件走 `UserFs` ⑥ PG 身份键 = `id`。
---
## 2. 触发词 ⇒ 去查(`$DOC\…`;**全表【详】§F**)
- **现状 / 该读哪篇** → `$DOC\BRIEF.md`;覆盖网络线入口 = 根 `接续入口_覆盖网络线_20260916.md`
- **UI / 前端** → `$DOC\01-规范\06-工作台UI规范.md`(**强制基线**;client bundle 启动时加载 ⇒ **改完必重启**)
- **"我做完了吗"** → `dsh-workflow` → `references/dsh-change-workflow` **阶段 5 §0 交付门禁**(⛔ 改完 / build 过 / 已 commit **都不算交付**)
- **新建档案** → `$DOC\05-交接单/README.md §二`(先**原子占号**)|**功能怎么改的** → `$DOC\调整方案/<NN>-<主题>.md`|**部署 / 构建 / 回滚** → `$DOC\DEPLOY-本部署.md`
- **待办** → `$DOC\01-规范\03-路线图与待办.md §二`/`$DOC\05-交接单/README.md §一`|**服务器文件 = 基线?** → `git hash-object`
- **功能 / 方案决策** → 技能 `dsh-decision`(`references/00-决策方法论.md` = 原 `dsh-decision-method`;`references/01-功能优先协作协议.md` = 原 `dsh-feature-first`);⚠️ **点名「决策方法」⇒ 立即 `Skill(...)`**,⛔ 不凭记忆
- **「是否已实现 / 能不能」** → `dsh-decision` → `references/01-功能优先协作协议.md §5.1 结论骨架`|**落地改造** → `dsh-workflow`(`references/dsh-change-workflow`)
- **排下一棒** → `dsh-workflow` → `references/dsh-auto-handoff-chain §3.1.1`(收口 + **3~4 分钟**;每线一个)|**复盘决策** → `scripts/extract-user-voice.py`
> ⚠️ **技能加载由模型判相关性,不能保证** ⇒ "动作前必须生效"的规则必须写在本文件里。
## 9. 工作区卫生 / 目录规范(全文 ⇒ 【详】§G + §H)
- 🔴 **收口必清本棒 tmp**(收尾四件套 + **第 ⑤ 件**);`tmp/` 留 **7 天**,超期进 `归档/tmp-<日期>/`;⛔ **不新建「待清理」类目录**(二值:**归档** or **删除**);⛔ 不留脚本副本;入库口径 ⇒ §4。
- 🔴 **两条硬判据**:① **`接续入口_*.md` 必须在工作区根**(移走 ⇒ 新会话**第一个信号就错** = **事故级**)② **根目录不许新增散落文件、不许移走白名单内的东西**(白名单 / 落点 / 命名 ⇒ 【详】§H)。
<!-- BEGIN reply-core (generated by agent-operating-rules/scripts/apply-reply-rules.py · 勿手改块内;要改口径改技能里那份再重跑本脚本) -->
<!-- REPLY-CORE:BEGIN (由 agent-operating-rules 技能生成 · 与技能内那份同源) -->
- **骨架**:`# 大类别`(已完成/待处理任务)→ `## 具体事项` → **每件事写两段:`当前状态:` + `待处理事项:`**。
- 🔴 **这两个小标题各占一行、每件事只写一次**;⛔ **不许在每条圆点前面都加「当前状态:」**(2026-10-07 用户点破:那样满屏都是前缀)。
- **`当前状态:`** 下面**每条一个圆点**(`- `),每条**一句陈述句**说重点,依据与细节放**句末圆括号**;**`待处理事项:`** 下面用序号 `1、2、3、`。
- **层级与顺序**:大类标题必须比任务名大一号;**已完成的大类放最前**,待处理放最后;附件写在**所属板块最末一行**;⛔ 不出四级标题。
- **首屏**:开头 3 行内先给判定(✅/⚠️/❌ + 一句),细节放后面。
- **三禁**(⛔ 任一命中 = 该条回复**作废、重写后再发**):**表格** / **长散文** / **碎标签堆叠**。
- **并列内容竖排**:多个候选、多项并列各占一段、逐条编号;⛔ 不横排、⛔ 不挤进一段、⛔ 不塞成表格的列。
- **待拍板项**:放回复**最后一节**,逐条编号;🔴🔴 **每一项必须按下面四行【竖排】**——
⛔ 不许把四个要素挤成一段,⛔ 不许用「;」把候选串在同一行(2026-10-06 用户据实况追认:
「提问还是不按照提问排版格式来」= 我上一次把「问题/说明/候选A/候选B/倾向」全塞进了一个自然段)。
形如:
`1、` **问题**:一句话说清要决定什么(⛔ 不用「这个/它/上述」这类指代)。
` ` **说明**:为什么要你定(影响谁/断多久/花多少钱/有无不可逆)。
` ` **候选 A**:优点…/缺点… —— **B、C 各占独立一行**,⛔ 不横排、⛔ 不挤进同一段。
` ` **倾向**:我选哪个 + 一句理由。
🔴🔴 **决定对象要点名到具体** —— 写清是**哪份文件 / 哪个技能 / 推哪个仓 / 动哪台机器**:
🔑 判据=**少了这个标识,用户还能不能决定** —— 不能 ⇒ 必须写进正文;能 ⇒ 删掉,
连同**只服务实现的细节**(函数名 / 变量名 / 行号 / sha / 表名字段名 / 内部编号)一起下沉「技术附录」。
(避坑依据 2026-10-09:把要撤的文件名省成「那两份」⇒ 用户回「不说具体 我怎么知道」,该条报废。)
- 🔴🔴 **一律用肯定表述**(2026-10-09 用户令):**写或改**技能与规则文件时 —— 本块 · 技能描述 ·
钩子文案 · 用途/范围段 —— 都写**「要什么、怎么做」**(例:「要点名到具体是哪份文件」);
**新建、生成时同样适用**(⛔ 不只管"修改")。
✅ 例外:**以「经验沉淀」或「红线/避坑」为目的**的技能与规则(踩坑记录 · 红线清单 · 反例库)
可以写负向 —— 写法=**先写正向目标,再把踩过的坑放括号里当依据**。
- 🔴🔴 **「变相征询」同样禁止**(2026-10-06 用户据实况追认):凡是**要用户拿主意**的事 ——
包括「**先只报不动**」「**等你发话**」「我倾向 X,你看呢」这类**不带选项的待定清单** ——
**一律按上一条写成「待拍板项」**(问题 + 说明 + **各候选的优点与缺点** + 倾向)。
⛔ 不许用一句"倾向"或"等你发话"**顶替**选项;⛔ 也不许把「没写选项的清单」当成"只是汇报"蒙过去。
反过来:**已自决**的事写成陈述句(「我选了什么,可推翻」),⛔ 不要混进待拍板清单里充数。
- ⛔ **不用征询句收尾**(「要我…吗/请确认/你看怎么办」);能自决策的直接做完,只留一句"我选了什么(可推翻)"。
- ⚠️ 若**本工作区另有更新的定稿**(环境文件里有更细的排版节)⇒ **以那份为准**,本块是通用形态。
<!-- REPLY-CORE:END -->