From 4f3bc42e781b53d47a929c22742f6612be14c18c Mon Sep 17 00:00:00 2001 From: maogeigei Date: Wed, 14 Oct 2026 16:34:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=9C=8B=E6=9D=BF=E6=94=B9?= =?UTF-8?q?=E5=90=8D=EF=BC=9A=E4=BA=A4=E4=BB=98=E7=89=A9/=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2=20=E2=86=92=20?= =?UTF-8?q?=E4=BA=A4=E4=BB=98=E7=89=A9/=E9=A1=B9=E7=9B=AE=E7=9C=8B?= =?UTF-8?q?=E6=9D=BF=EF=BC=88=E6=89=BF=E6=8E=A5=E6=8A=80=E8=83=BD=E4=BB=93?= =?UTF-8?q?=20fe22f4c=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户令:「会话技能的两个看板 改名 会话看板 和 项目看板」 · 目录改名(project-board.py / project-board.html / project-board-launch.py 三份一并跟随) · 三文件内「项目管理界面」全部改「项目看板」,功能性路径(BOARD_DIR/TARGET)已指向 <技能包>/boards/项目看板/ · 计划任务 dsh-project-board-keepalive 动作与 CWD 同步改名 · 验收:pid 40776 · HTTP 200 · 54102 字节 · 项目看板 · 执行任务 · /healthz ok · 今日日志补记「相对路径」与「改名」两节 --- .workbuddy/memory/2026-10-14.md | 64 +++++++++++++++++++ .../project-board-launch.py | 8 +-- .../project-board.html | 8 +-- .../project-board.py | 8 +-- 4 files changed, 76 insertions(+), 12 deletions(-) rename 交付物/{项目管理界面 => 项目看板}/project-board-launch.py (92%) rename 交付物/{项目管理界面 => 项目看板}/project-board.html (82%) rename 交付物/{项目管理界面 => 项目看板}/project-board.py (93%) 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` 的 `` → `项目看板 · 执行任务`、`<div class="brand">` → `项目看板`。 +- 工作区三文件内「项目管理界面」全改(含功能性路径 `BOARD_DIR`/`TARGET`),**`remain=0`**。 +- 计划任务 `dsh-project-board-keepalive`:动作与 CWD 同步指向 `交付物/项目看板/project-board-launch.py`。 +- `references/manifest.md`:目录名 + 四行 md5/尺寸更新。 + +**端到端验收**:服务重起 pid **23596 → 40776** · HTTP **200** · **54102 字节** · +`<title>项目看板 · 执行任务` · `/api/projects` 出数据 · `/healthz` ok。 +`--filter 看板`:**PASS 110 / FAIL 0**。 + +**入库**: +- 技能仓提交 `fe22f4c`(git 识别 R096/R099/R089 重命名;凭据扫描无命中;行尾全 `lf`)。 +- 工作区仓提交 `6b783aa`,推送 `df9dcfb..6b783aa`。 + (暂存清单 R092/R082/R093 —— 三文件全被识别为重命名,非删+增。) + +**沉淀**: +- 🔴 **改名是链式动作,不是 `mv` 一下** —— 完整链:改目录 → 改包内引用 → 改展示名 → 改 HTML 标题/brand + → 改工作区薄转发 → 改计划任务动作与 CWD → **重起服务验端到端** → 入库。 + 漏掉"重起"这一步,改名只落在磁盘上、线上还是旧名(HTTP 标题是**最硬的验收点**)。 +- 🔴 **工作区侧留薄转发层的价值这轮兑现了** —— 计划任务指工作区稳定路径, + 技能包真身怎么搬、怎么改名,任务都不用动。 diff --git a/交付物/项目管理界面/project-board-launch.py b/交付物/项目看板/project-board-launch.py similarity index 92% rename from 交付物/项目管理界面/project-board-launch.py rename to 交付物/项目看板/project-board-launch.py index a6c7246..777d816 100644 --- a/交付物/项目管理界面/project-board-launch.py +++ b/交付物/项目看板/project-board-launch.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -"""项目管理界面 —— **工作区侧的入口(薄转发)**。 +"""项目看板 —— **工作区侧的入口(薄转发)**。 🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中, 分两个看板文件夹,开个 boards 文件夹放两个看板」)⇒ 真身在 - `<技能包>/boards/项目管理界面/`。本文件**只是工作区侧的落点**: + `<技能包>/boards/项目看板/`。本文件**只是工作区侧的落点**: 计划任务的动作指向它(动作里没有 env 字段 ⇒ 变量只能在进程内设),它把活转给真身。 ## 为什么留这一层(⛔ 不是复制) @@ -30,7 +30,7 @@ import runpy from pathlib import Path HERE = Path(__file__).resolve().parent -WS = HERE.parents[1] # /交付物/项目管理界面 → +WS = HERE.parents[1] # /交付物/项目看板 → DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism") @@ -54,7 +54,7 @@ def _skill_root() -> Path: SKILL = _skill_root() -TARGET = SKILL / "boards" / "项目管理界面" / "project-board-launch.py" +TARGET = SKILL / "boards" / "项目看板" / "project-board-launch.py" # ── 变量只在这里设(计划任务动作没有 env 字段)── os.environ.setdefault("PYTHONIOENCODING", "utf-8") diff --git a/交付物/项目管理界面/project-board.html b/交付物/项目看板/project-board.html similarity index 82% rename from 交付物/项目管理界面/project-board.html rename to 交付物/项目看板/project-board.html index cf3a3c6..3c09799 100644 --- a/交付物/项目管理界面/project-board.html +++ b/交付物/项目看板/project-board.html @@ -29,14 +29,14 @@

📍 这个页面已迁入会话技能

-

2026-10-14 · 项目管理界面(本机所有工作区 · 项目 × 卡片)

+

2026-10-14 · 项目看板(本机所有工作区 · 项目 × 卡片)

真身位置
    -
  1. 页面:<技能包>/boards/项目管理界面/project-board.html
  2. -
  3. 后端:<技能包>/boards/项目管理界面/project-board.py
  4. -
  5. 启动器:<技能包>/boards/项目管理界面/project-board-launch.py
  6. +
  7. 页面:<技能包>/boards/项目看板/project-board.html
  8. +
  9. 后端:<技能包>/boards/项目看板/project-board.py
  10. +
  11. 启动器:<技能包>/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] # /交付物/项目管理界面 → +WS = HERE.parents[1] # /交付物/项目看板 → DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism") @@ -52,7 +52,7 @@ def _skill_root() -> Path: SKILL = _skill_root() -BOARD_DIR = SKILL / "boards" / "项目管理界面" +BOARD_DIR = SKILL / "boards" / "项目看板" TARGET = BOARD_DIR / "project-board.py" # ── 变量(⛔ 不覆盖宿主已设的;计划任务动作没有 env 字段 ⇒ 只能在本进程里设)──