diff --git a/.workbuddy/memory/2026-10-14.md b/.workbuddy/memory/2026-10-14.md index 8510168..604d8e0 100644 --- a/.workbuddy/memory/2026-10-14.md +++ b/.workbuddy/memory/2026-10-14.md @@ -430,3 +430,67 @@ contentm_agent 旧 27092 → 29400 07:50:58 ✅ 读库正常 这类**位置代称**,就该问一句"另一个文件搬家时它还成立吗"。 - 🔴 **判据锚点必须逐字抄原文**(本轮第三次栽):文档改措辞后判据恒红, ⛔ 别把"判据红"直接读成"实现坏了"——先问"是不是锚点过期了"。 + +--- + +## 第二件:会话技能包内代码一律相对路径(用户令) + +**原话**:「会话技能中 能用相对路径的都要用相对路径」 + +**新立判据**(SKILL.md §0 + 第 11 条禁令)—— 问一句「**这个根能不能从『我自己的位置』推出来?**」: +- **能**(本包自己的目录)⇒ 从 `__file__` 上跳推导(`Path(__file__).resolve().parent` 上跳 N 层)。 +- **不能**(工作区根/配置目录/文档库根 —— 与技能包无任何相对关系)⇒ 读本包 `env/roots.env`。 +- **推不出来** ⇒ **如实报错 + 留痕**。⛔ 不许静默扫空;⛔ 也不许回落到一个猜的盘符。 +- ⚠️ **文档/注释里的绝对路径不在此列** —— 举例、历史取证照写,那是证据。 + +**落的四处改动**: +- `boards/项目看板/project-board.py`:新增 `_sm_load_roots()`(`range(5)`); + `_SKILL_ROOT` 从 `HERE.parent.parent` 推导;`SKILL_BOARD_DIR` / `SKILL_SCRIPTS` 同源推导。 +- `WS_ROOTS` **从常量改函数** `_ws_roots()`:`DSH_PM_BOARD_ROOTS` → `DSH_AIROOT` → 由自身工作区推父目录, + 三级回落;全空 ⇒ `to_project_view()` 里**如实报错 + 写 `logs/project-board.err.log`** 后返回,⛔ 不静默扫空。 +- `scripts/selftest.py`:生产区定位**改扫兄弟区**(去写死区名,靠 `DSH_AIROOT` 遍历找 `.workbuddy/collab/collabd.config.json`); + 两处测试假路径去盘符(`__selftest_no_such_ws__` / `__selftest_ws__`)。 +- `env/roots.env.example` 入库,真文件由 `install.py --apply` 生成、**不入库**。 + 键:`DSH_WS_ROOT` / `DSH_AIROOT` / `WB_RESULT_HOOK_WS` / `COLLABD_PROD_CONFIG` / + `CODEBUDDY_CONFIG_DIR` / `DSH_DOCS_ROOT`。注入用 `setdefault`(宿主 env 优先,本文件兜底)。 + +**换机场景实测(两条都对)**: +- 只带包、不带 `env/` ⇒ **如实报错**(不瞎猜盘符)。⚠️ 我第一次"模拟换机"只清 env 变量是**假验证** + ——`env/roots.env` 文件还在,照样读得到 ⇒ 必须把包拷到 `/tmp` 且**不带 `env/`** 才验得出真行为。 +- 只给 `DSH_AIROOT` ⇒ 正常扫到 **4 个项目**。 + +**禁令条数**:「十条禁令」→「**十一条禁令**」(含第 0 步里那句"在十一条禁令之前"一并订正)。 + +--- + +## 第三件:两个看板定名(用户令) + +**原话**:「会话技能的两个看板 改名 会话看板 和 项目看板」 + +**定名**:**会话看板**(`boards/会话看板/`,端口 **20099**)|**项目看板**(`boards/项目看板/`,端口 **20100**)。 +原「项目管理界面」这个叫法**全链退场**。 + +**改了什么**: +- 技能包目录:`boards/项目管理界面/` → `boards/项目看板/` +- 工作区目录:`交付物/项目管理界面/` → `交付物/项目看板/`(三份薄转发/路标页跟随) +- 包内三处路径引用 + **展示名 6 处**(模块 docstring、错误日志前缀、`argparse description`、启动横幅); + `project-board.html` 的 `
2026-10-14 · 项目管理界面(本机所有工作区 · 项目 × 卡片)
+2026-10-14 · 项目看板(本机所有工作区 · 项目 × 卡片)
<技能包>/boards/项目管理界面/project-board.html<技能包>/boards/项目管理界面/project-board.py<技能包>/boards/项目管理界面/project-board-launch.py<技能包>/boards/项目看板/project-board.html<技能包>/boards/项目看板/project-board.py<技能包>/boards/项目看板/project-board-launch.py
技能包默认根:E:/ProgramData/.workbuddy/skills/session-mechanism
diff --git a/交付物/项目管理界面/project-board.py b/交付物/项目看板/project-board.py
similarity index 93%
rename from 交付物/项目管理界面/project-board.py
rename to 交付物/项目看板/project-board.py
index d730408..aeb50df 100644
--- a/交付物/项目管理界面/project-board.py
+++ b/交付物/项目看板/project-board.py
@@ -1,10 +1,10 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-"""项目管理界面 —— **工作区侧的落点(薄转发)**。
+"""项目看板 —— **工作区侧的落点(薄转发)**。
🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中,
分两个看板文件夹,开个 boards 文件夹放两个看板」)⇒ **真身**在
- `<技能包>/boards/项目管理界面/project-board.py`(页面 `project-board.html` 与它同目录)。
+ `<技能包>/boards/项目看板/project-board.py`(页面 `project-board.html` 与它同目录)。
## 为什么留这一层(⛔ 不是复制)
@@ -29,7 +29,7 @@ import runpy
from pathlib import Path
HERE = Path(__file__).resolve().parent
-WS = HERE.parents[1] #