Files
workbuddy_skills/dsh-local-env/references/dsh-env-bootstrap/常驻规则-快照.md
T
admin e03465c398 按用户令提交:把此前未纳管的 9 个技能目录一并入库
用户令逐字:「E:/ProgramData/.workbuddy/skills  提交仓库是指的这里」——
即本目录就是仓库(2026-10-07 已在本目录建仓,见当日日志 §22),本轮把余下未纳管的 9 个技能一并提交。

本次入库(9 个技能,46 个文件):
1、`AI HOT`
2、`draw-ui`
3、`dsh-diagnose`
4、`dsh-knowledge`
5、`dsh-local-env`
6、`dsh-opensource-release`
7、`dsh-workflow`
8、`oil-motion`
9、`skills-security-check`

提交前核对:
· **凭据类扫描**(`*.env` / `*token*` / `*.key` / `*secret*` / `*.pem`)⇒ **零命中** ✓;
· 体积合计约 20 MB(`draw-ui` 12M + `oil-motion` 6.5M 是大头,形态为配图/素材 ——
  仓库 `.gitignore` 里明写「`assets/*.png` 是内容不是产物」⇒ 属刻意入库);
· 运行产物仍按既定规则排除(`__pycache__` / `logs/` / `tmp/` / `.venv/` / `*.egg-info` / `uv.lock` / `.workbuddy/`)。
2026-10-08 22:29:08 +08:00

14 KiB
Raw Blame History

常驻规则 · 可移植快照(由 scripts/resident-rules.py --snapshot 生成,勿手改)

这是「工作区 CODEBUDDY.md 关键章节」的副本,随技能走 ⇒ 换电脑 / 换工作区也能带走。 ⚠️ 权威方向单向:CODEBUDDY.md 是权威,本文件是它的副本(重生成用 --snapshot)。 ⚠️ 环境相关项(绝对路径 / IP / hooks 路径 / 工具位置)注入后必须按新环境核对:见文末「待核清单」。

骨架锚点(校验用;丢了就等于规则没了)

  • A1 — 只问「超过现有判断方法边界」的问题
  • A2 — 禁用征询句收尾
  • A3 — 四件或七件套必跑
  • R7 — 禁未经确认的批量 / 全仓写入
  • R7-边界 — R7 只管「不是我的 lane」
  • R9 — 绝对禁止「人工删锁 / 接管」
  • R11 — 只做正向迭代
  • U27 — 要解决问题,不将就妥协
  • L1 — 抢到之前不要动文件
  • L2 — 锁的生命周期 = 任务的生命周期
  • F1 — 强遵循
  • F2 — 已完成的大类放最前
  • F3 — 表格 / 长散文 / 碎标签堆叠

1. 提问判据(唯一一条)

只问「超过现有判断方法边界」的问题。(用户原话)

  • 边界内 ⇒ 自决,不要问:技术选型 / 实现路径 / 命名与数据结构 / 调参 / 部署与同步 / 排查方法 / 版本依赖 / 兼容降级 / 方案取舍 / 文档技术内容。「部署上线」属此项 ⇒ 做完即上线,不要问;生产变更直接做、只需动手前一句话说明(判据 ⇒ R8;详 A1/A2)。

  • 边界外 ⇒ 必须问:① 业务目标与优先级 ② 花钱与资源承诺 ③ 对外承诺 ④ 需用户提供的凭据或审批 ⑤ 无客观优劣的偏好 ⑥ 影响面超出本平台 ⑦ 红线门禁 ⑧ 判不准。

  • 🔴 讨论技术不谈法规:⛔ 不引条文当论据 / 不提合规风险 / 不写进方案与验收判据;只在你问起、或对象就是"对外承诺 / 资质 / 合同"时才谈(详 A3)。

  • 判据:有没有客观可判的优劣?有 ⇒ 自决,没有 ⇒ 问。上抛门槛 = 存在真取舍:候选只有优点或只有缺点 ⇒ 自己拍掉;各有优劣才上抛,且逐项写优点 + 缺点(详 A4)。

  • ⛔ 不许捆包:要问红线只问那一句;技术方案自己定好、当已定项陈述。

  • ⛔ 禁用征询句收尾(「要我…吗 / 请确认 / 你看怎么办」)⇒ 按三问重判(真门禁?已定的事又问?真取舍?),没命中就删掉、自己做完(详 A5)。

  • 🔴 上抛 / 待拍板内容必须自包含(发送前就按规范写):⛔ 作用域 = 一切「要用户拿主意」的输出(提问 · 末尾待拍板清单 · 候选 · 表格盘点 —— 换形态不豁免)。四要素:① 问题 —— 一句话说清要决定什么(⛔ 不用指代)② 说明 —— 为什么要你定("影响谁 / 断多久 / 花多少钱")③ 每候选写优点 + 缺点,末行给倾向 ④ 一轮一问;⛔ 不出现包名 / 路径 / 变量名 / 类名(详 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)。



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 那句「或确认接管后人工删锁」不构成授权)。抢不到锁唯一合规 = 停手 + 报告用户(处置权只属用户本人)
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。

8. 会导致事故的实测事实(6 条速查 · 详解 ⇒ 【详】§E)

🔴 速查(详情 + 后果 ⇒ 【详】§E):① 权限档位只在开会话时播种 ② 插件「禁用」= 真卸载 ③ 配额 384 MiB / V8 堆按宿主算 ④ 业务插件只走门户候选池 ⑤ home 写文件走 UserFs ⑥ PG 身份键 = id。



待核清单(换环境后逐项核对,脚本不代改)

  • 工作区根 E:/ProgramData/AIProject/ai1net-dsh-server
  • 文档库 D:/github/dsh_shenxian/dsh-server-docs
  • 代码仓 D:/github/dsh_shenxian
  • 备份目录 /opt/dsh/backups
  • 服务器 bt-server(47.77.182.89,SSH 22;别名里的 32022 已失效)