技能包:配置与代码分家 —— 每包自建 env/ 放本机专属配置,scripts/ 不再写死本机路径
用户 2026-10-11 原话: · 19:22「这个环境都是针对一台机器的,同步到别的机器把环境都搞坏了」 · 19:28「不用挪出 用env文件夹区分就行,重点是 脚本是脚本 配置是配置」 · 19:29「每个技能 需要环境配置的 都有自己的 env文件夹」 · 19:30「修改完成后要仔细检查 避免调整后 各技能脚本运行失败」 改动: 1、session-mechanism 新增 env/(roots.env=本机真身不入库 + roots.env.example=样例入库), install.py 的 ROOTS_ENV 改指 env/roots.env;全包脚本/hook 的配置定位统一为 「向上 4 层 × env/roots.env 优先 → 包根 roots.env 兼容 → 技能库那份兜底」。 2、去硬编码:collabctl / keepalive / supervise-launch / board-launch 里的本机路径与本机工作区 清单全清,改为 DSH_AIROOT(兜底 dirname(DSH_WS_ROOT))+ 扫 <AIROOT>/*/.workbuddy/collab/ 自动发现;保活任务名按 collabd-keepalive-<工作区名> 现推;启动器默认值改 ~/.workbuddy 形态。 3、browser-harness:bh_chrome_keepalive.py 默认值全部改 env 驱动,新增 env/bh.env.example。 4、.gitignore:env/ 下只放行 *.example(三行三种层级)+ 兜住旧位置的包根 roots.env。 5、改包纪律.md 新增「四、包结构:脚本是脚本,配置是配置」,立为全仓通用规矩。 6、文档同步:SKILL.md / deploy.md(新增 §3b 配置层级、§6 换机器必查 6 件事)/ rules.md / pitfalls.md / supervise-persistence.md。 验收(本机):py_compile 34 个 py 全过;selftest PASS 109 / FAIL 0; 逐文件实证 8 个 loader 命中 env/roots.env;preflight-lock.sh 同目录实测解出两个根; install.py --manifest 77 份、语法失败 0。 异机验证(包拷成「新克隆」(只有 *.example)+ 另造假工作区 ws-alpha/ws-beta): install.py --apply 自生成该机 env/roots.env;collabctl/keepalive 自动发现的确实是 ws-alpha/ws-beta、任务名现推(写死清单确已消除);部署副本本地无 roots.env 时靠 CODEBUDDY_CONFIG_DIR 兜底读到技能库那份;整套 selftest 有宿主库时 PASS 108 / FAIL 1 (唯一 FAIL=该区没有常驻心跳,环境所致;本机常驻在跑时同一套为 PASS 109 / FAIL 0)。
This commit is contained in:
1 parent
90cc4315d5
commit
d81f75f173
37 files changed
+763
-291
No files matched your search
@@ -221,8 +221,9 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
⚠️ 该判据**扫文本**,故必须先剥掉 `SCHED_TASKS` 那种"故意列旧名去禁用它"的**否定语境块**
|
||||
(同一坑本项目踩过三次)。
|
||||
|
||||
- ⚠️ **变量名坑**:`roots.env` 给的是 **`COLLABD_PROD_CONFIG`**,而 `board.py`/`collabd.py` 读的是 **`COLLABD_CONFIG`** ⇒ 名字对不上 ⇒ `roots.env` **兜不住**。
|
||||
- 🔴 **启动器里写死最稳**(⛔ 别指望 `roots.env` 兜住各区 —— 它只在技能目录,而各区副本在 `<ws>/.workbuddy/collab/`,`_sm_load_roots()` 向上 4 层**找不到**)。
|
||||
- ⚠️ **变量名坑**:`env/roots.env` 给的是 **`COLLABD_PROD_CONFIG`**,而 `board.py`/`collabd.py` 读的是 **`COLLABD_CONFIG`** ⇒ 名字对不上 ⇒ `env/roots.env` **兜不住**。
|
||||
- 🔴 **启动器把该设的 env 在进程内设好**(2026-10-11 起由 `env/roots.env` 的 `DSH_WS_ROOT` 供主工作区根;⛔ 兜底值不再写死本机工作区 —— 解析不到就**优雅退出**并留痕,⛔ 不猜路径)。
|
||||
⚠️ 各区副本(`<ws>/.workbuddy/collab/`)里的 `collabd.py` **没有** `env/roots.env` 可读(`_sm_load_roots()` 向上 4 层找不到)⇒ 那一路靠**启动器设 env** + 该区 `collabd.config.json` 兜住。
|
||||
- 🔴 **重构"起法"时,旧起法里的 env 必须逐条搬过去**(P0-73 就是改成两层形态时**丢了 `CODEBUDDY_CONFIG_DIR` 这一句**)。
|
||||
- 🔴 **各区 config 的 `host_db` 写死绝对路径最稳**(vibe 一直这么写 ⇒ 只有 ai1net 炸)。
|
||||
|
||||
@@ -402,7 +403,8 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
## §0 怎么用(先读这一节)
|
||||
|
||||
**① 我要装 / 要换机器** ⇒ 跑 `python install.py --dry-run` 看 diff,再 `python install.py --apply`,最后 `python install.py --verify`。
|
||||
(`--apply` 会:写 `roots.env` → 按**声明表**接线全局钩子 → 初始化工作区 → 记 `install.log`。⛔ 不硬编码 python 路径与盘符。)
|
||||
(`--apply` 会:写 `env/roots.env` → 按**声明表**接线全局钩子 → 初始化工作区 → 记 `install.log`。⛔ 不硬编码 python 路径与盘符。)
|
||||
🔴 **包内目录怎么分(2026-10-11 用户令:「脚本是脚本 配置是配置」)**:**每台机器各不同**的配置一律放本包 **`env/`**(`env/roots.env` 本机生成、不入库;`env/roots.env.example` 是入库样例);`scripts/` 只留通用代码。仓根 `.gitignore` 只放行 `env/**/*.example`。
|
||||
|
||||
**⓪ 我要动手(建判据/写验收/报"已完成"/任何带"现在·已·还差"的结论)** ⇒ **先读 `references/00-动手前必过.md`**(🔴 **动手层**,2026-10-04 建,只有三条动作:① 查状态**问程序自己**,⛔ 不许 glob/手拼路径 ② 引用任何读数**先看它什么时候写的** ③ 写判据**先让基线全绿**再谈抓得住 —— 每条都对应当天真实翻车,且都已落判据不许退化)。
|
||||
|
||||
@@ -881,8 +883,10 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
**为什么(2026-10-05 实测)**:直起 ⇒ **崩溃重启循环、20099 从没绑上**。现场输出:
|
||||
`⚠️ collabd:未找到部署配置(COLLABD_CONFIG 未设)⇒ 已拒跑` —— `board.py` 顶层用
|
||||
**`COLLABD_CONFIG`** 定位配置(它要 `import collabd.py`),而**计划任务的动作里没有 env 字段**
|
||||
⇒ 该变量只能由**启动器在进程内设**。⚠️ **名字别混**:`roots.env` 给的是 `COLLABD_PROD_CONFIG`,
|
||||
而 `board.py` 读的是 `COLLABD_CONFIG` ⇒ 名字对不上,`roots.env` **兜不住它**。
|
||||
⇒ 该变量只能由**启动器在进程内设**。⚠️ **名字别混**:`env/roots.env` 给的是 `COLLABD_PROD_CONFIG`,
|
||||
而 `board.py` 读的是 `COLLABD_CONFIG` ⇒ 名字对不上,`env/roots.env` **兜不住它**。
|
||||
🔴 2026-10-11:**主工作区根也从 `env/roots.env` 的 `DSH_WS_ROOT` 读**(⛔ 兜底不再写死 ai1net-dsh-server);
|
||||
解析不到 ⇒ 启动器**写 `logs/board-launch.err.log` 留痕 + 退出码 2**,⛔ 不猜路径、不建错任务。
|
||||
· ⚠️ 启动器的 `WorkingDirectory` =**技能 `scripts/` 目录**(启动器自己定位 `board.py`);
|
||||
看板**配置恒指主工作区**那份(看板是全局共用一份)——这与 `--supervise` 必须指**工作区根**是两回事。
|
||||
· 🔴 **`ExecutionTimeLimit` 必须 `0`(无时限)** —— 看板是**长驻服务**;
|
||||
@@ -961,7 +965,9 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
## §3 目录与依赖
|
||||
|
||||
```
|
||||
SKILL.md install.py roots.env(装后生成) install.log(装后生成)
|
||||
SKILL.md install.py install.log(装后生成)
|
||||
env/ roots.env(装后生成·不入库) roots.env.example(入库样例)
|
||||
🔴 「每台机器各不同的配置」只放这里(脚本是脚本 配置是配置)
|
||||
references/ architecture collab collab-detail rules deploy pitfalls taskgraph forensics manifest
|
||||
scripts/hooks/ 6 份宿主钩子(10 条接线)
|
||||
scripts/lock/ handoff-guard.sh preflight-lock.sh handoff-status.py op-lock.sh
|
||||
|
||||
Reference in new issue
Block a user