Files
dsh_ai1net_server/归档/技能包快照/session-mechanism-20261004/references/rules.md
T
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

6.7 KiB
Raw Blame History

会话机制 · 规矩与判据(照它做,⛔ 别自己另发明)

⚠️ 本文件是作业规矩;机制全貌 ⇒ references/architecture.md;坑 ⇒ references/pitfalls.md。 🔴 与项目层 CODEBUDDY.md §1 冲突时以项目层为准(那里有裁决顺序)。

1 提问判据(唯一一条)

只问「超过现有判断方法边界」的问题。

  • 边界内 ⇒ 自决,不要问:技术选型 / 实现路径 / 命名与数据结构 / 调参 / 部署与同步 / 排查方法 / 版本依赖 / 兼容降级 / 方案取舍 / 文档技术内容。 「部署上线」属此项 ⇒ 做完即上线,不要问;生产变更直接做,只需动手前一句话说明。
  • 边界外 ⇒ 必须问:① 业务目标与优先级 ② 花钱与资源承诺 ③ 对外承诺 ④ 需用户提供的凭据或审批 ⑤ 无客观优劣的偏好 ⑥ 影响面超出本平台 ⑦ 红线门禁 ⑧ 判不准。
  • 判据:有没有客观可判的优劣?有 ⇒ 自决;没有 ⇒ 问。
  • 上抛门槛 = 存在真取舍:候选只有优点或只有缺点 ⇒ 自己拍掉;各有优劣才上抛,且逐项写优点 + 缺点。
  • ⛔ 不许捆包:要问红线只问那一句;技术方案自己定好、当已定项陈述。
  • ⛔ 禁用征询句收尾(「要我…吗 / 请确认 / 你看怎么办」)⇒ 按三问重判,没命中就删掉、自己做完。
  • 🔴 上抛内容必须自包含:① 一句话说清要决定什么(⛔ 不用指代)② 为什么要你定(影响谁 / 断多久 / 花多少钱)③ 每候选写优点 + 缺点,末行给倾向 ④ 一轮一问 ⑤ ⛔ 不出现包名 / 路径 / 变量名。

2 回复排版(🔴 用户 2026-10-01 定稿,照抄即可)

  • 骨架:# 大类(已完成 / 待处理任务)→ ## 任务名 → 每件事两段:当前状态 + 待处理事项。
  • 🔴 大类标题必须比任务名大一号(大类用 #、任务名用 ##;⛔ 不许同号,否则层级压平)。
  • 当前状态:每条一个圆点,一句陈述句说重点;复杂情况放句末圆括号。
  • 待处理事项:用序号(1、2、,⛔ 不是 1.);每条写完整句子。
  • 附件:写在该板块最末一行(附件:<路径>)。
  • 大类顺序:已完成的放最前,待处理任务放最后。
  • 三禁:⛔ 表格(=省略讲理)|⛔ 长散文(不是写小说)|⛔ 碎标签堆叠。
  • ⚠️ 本条只管给人读的回复;注释 / 日志 / 解析字段不受限。

3 锁

  • 开工先抢锁(是"抢"不是"看");抢不到 ⇒ 停手 + 报告(红线 R9:⛔ 不删锁、⛔ 不接管)。
  • 🔴 默认一律带域(--domains <本工作区域>/);⛔ 别省略 —— 省略=全局独占,别人连域锁都抢不了。
  • 🔴 只有真正"全平台共用"的改动(配置 / 加解密 / 隔离 / 锁与钩子本身、技能文件)才用独占。
  • 🔴 释放必须反序且带会话名:--release → --release-exec "<会话名>";⛔ 不带名 ⇒ 拒释放。
  • 🔴 锁的生命周期 = 任务的生命周期:⛔ 禁抢锁做一半、不解锁就结束回合(带锁结束=把所有人挡在门外);中途要停 ⇒ 先释放。
  • 🔴 域键算法 shell/hook 必须逐字一致,否则静默失效。

4 日志闸(会话"活多久"的物理边界)

  • 本工作区闸值:文件软 5 MiB / 硬 8 MiB;工具调用软 200 / 硬 250。命中 ⇒ 开接续会话。
  • 🔴 宿主侧还有一个 10 MiB 硬上限:撞顶即拒写 ⇒ 界面静默哑掉、用户零感知,而投递方仍记 ok:true(假绿)。
  • 🔴 病根是"调用次数多",不是"每次调用贵";增长只与"工具在跑"成正比(实测:活跃 ≈630 KB/分 ↔ 空闲 34 分钟 0 行)。
  • 压增长三条硬纪律:① 大输出先落盘、只读关键行 ② 命令层限流(| head -30 / grep -c 代替裸 grep)③ 让脚本内部聚合、只 print 摘要。⛔ 禁 cat 大文件、无 head 的 grep -r。
  • ⛔ 不要在会话里起常驻后台长跑任务:它每次输出都把会话反复唤醒 ⇒ 永远回不到 idle ⇒ 用户看到"卡死"(已复现多次)。✅ 正确起法=会话后台任务 + stdout 全重定向到文件;或干脆做成独立进程(见 §6)。

5 钩子与脚本的写法约束

  • 🔴 hook 脚本必须走 sys.stdout.buffer.write(bytes) 输出 —— 否则文案含非 ASCII 符号时抛 UnicodeEncodeError ⇒ stdout 为空 ⇒ 静默放行。
  • 🔴 不要按位置推导根目录:钩子脚本被搬一次就会静默指错(历史事故:台账写到别处、测试却全绿)⇒ 用外置的 roots.env(本包由 install.py 生成)。
  • ⚠️ settings.json 的 hook 条目没有 env 字段 ⇒ ⛔ 别指望用 env 给钩子传参。
  • 🔴 作用域⛔ 不许静默排除:被跳过必须留下痕迹(写跳过清单 + stderr),否则"没动作"与"坏了"长得一模一样。
  • ⚠️ 钩子脚本内容改动即时生效;但 settings.json 的 hooks 条目是应用启动时快照 ⇒ 改条目要完全重启(关窗 ≠ 退出)。

6 常驻的精确边界

  • 🔴 「协作与投递一直运行(常驻)」是已定案项(09-29 定案,2026-10-01 用户再确认)⇒ ⛔ 不得拿"进程数=0"去否它。
  • 🔴 ⛔ 禁的是"在会干活的会话里起":会话自己的后台任务会压制该会话的 idle 钩子(实测被僵尸任务压 6h20m) ⇒ 载体应用专用容器会话;且输出必须完全静默(stdout 全重定向到文件,⛔ 否则反复唤醒宿主 ⇒ 看着像卡死)。
  • ✅ 独立进程不在禁令内(输出不接回任何会话 ⇒ 不唤醒宿主);但它读不到网关口令 ⇒ 不能投递,只能做只读判定 / 告警。
  • 存活边界一句话:「后台任务跟着应用活,不跟着会话活」⇒ 要"关了应用也还在"必须做成独立进程(⚠️ 但那就没口令了)。

7 其他硬约束

  • 🔴 技术讨论不谈法规:⛔ 不引条文当论据、⛔ 不主动提合规、⛔ 不前置上抛;只在你问起、或对象就是"对外承诺 / 资质 / 合同"时才谈。
  • 🔴 红线 R5 / R7 / R9 / R10 永远硬约束(内容见项目层 CODEBUDDY.md §3 红线全表)。
  • 🎯 要解决问题,不将就妥协:降级 / 延期 / 静默兜底都不算解决;🟢 只做正向迭代。
  • 🔴 接手前人结论先做最小取证,⛔ 别拿旧结论当既成事实;取现状一律按 mtime 取最新那份。