项目看板改名:交付物/项目管理界面 → 交付物/项目看板(承接技能仓 fe22f4c)
用户令:「会话技能的两个看板 改名 会话看板 和 项目看板」 · 目录改名(project-board.py / project-board.html / project-board-launch.py 三份一并跟随) · 三文件内「项目管理界面」全部改「项目看板」,功能性路径(BOARD_DIR/TARGET)已指向 <技能包>/boards/项目看板/ · 计划任务 dsh-project-board-keepalive 动作与 CWD 同步改名 · 验收:pid 40776 · HTTP 200 · 54102 字节 · <title>项目看板 · 执行任务</title> · /healthz ok · 今日日志补记「相对路径」与「改名」两节
This commit is contained in:
1 parent
6b783aaf82
commit
4f3bc42e78
4 files changed
+76
-12
No files matched your search
@@ -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` 的 `<title>` → `项目看板 · 执行任务`、`<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>项目看板 · 执行任务</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 标题是**最硬的验收点**)。
|
||||||
|
- 🔴 **工作区侧留薄转发层的价值这轮兑现了** —— 计划任务指工作区稳定路径,
|
||||||
|
技能包真身怎么搬、怎么改名,任务都不用动。
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""项目管理界面 —— **工作区侧的入口(薄转发)**。
|
"""项目看板 —— **工作区侧的入口(薄转发)**。
|
||||||
|
|
||||||
🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中,
|
🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中,
|
||||||
分两个看板文件夹,开个 boards 文件夹放两个看板」)⇒ 真身在
|
分两个看板文件夹,开个 boards 文件夹放两个看板」)⇒ 真身在
|
||||||
`<技能包>/boards/项目管理界面/`。本文件**只是工作区侧的落点**:
|
`<技能包>/boards/项目看板/`。本文件**只是工作区侧的落点**:
|
||||||
计划任务的动作指向它(动作里没有 env 字段 ⇒ 变量只能在进程内设),它把活转给真身。
|
计划任务的动作指向它(动作里没有 env 字段 ⇒ 变量只能在进程内设),它把活转给真身。
|
||||||
|
|
||||||
## 为什么留这一层(⛔ 不是复制)
|
## 为什么留这一层(⛔ 不是复制)
|
||||||
@@ -30,7 +30,7 @@ import runpy
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
HERE = Path(__file__).resolve().parent
|
HERE = Path(__file__).resolve().parent
|
||||||
WS = HERE.parents[1] # <ws>/交付物/项目管理界面 → <ws>
|
WS = HERE.parents[1] # <ws>/交付物/项目看板 → <ws>
|
||||||
DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism")
|
DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism")
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ def _skill_root() -> Path:
|
|||||||
|
|
||||||
|
|
||||||
SKILL = _skill_root()
|
SKILL = _skill_root()
|
||||||
TARGET = SKILL / "boards" / "项目管理界面" / "project-board-launch.py"
|
TARGET = SKILL / "boards" / "项目看板" / "project-board-launch.py"
|
||||||
|
|
||||||
# ── 变量只在这里设(计划任务动作没有 env 字段)──
|
# ── 变量只在这里设(计划任务动作没有 env 字段)──
|
||||||
os.environ.setdefault("PYTHONIOENCODING", "utf-8")
|
os.environ.setdefault("PYTHONIOENCODING", "utf-8")
|
||||||
@@ -29,14 +29,14 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<h1>📍 这个页面已迁入会话技能</h1>
|
<h1>📍 这个页面已迁入会话技能</h1>
|
||||||
<p class="sub">2026-10-14 · 项目管理界面(本机所有工作区 · 项目 × 卡片)</p>
|
<p class="sub">2026-10-14 · 项目看板(本机所有工作区 · 项目 × 卡片)</p>
|
||||||
|
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<strong>真身位置</strong>
|
<strong>真身位置</strong>
|
||||||
<ol>
|
<ol>
|
||||||
<li>页面:<code><技能包>/boards/项目管理界面/project-board.html</code></li>
|
<li>页面:<code><技能包>/boards/项目看板/project-board.html</code></li>
|
||||||
<li>后端:<code><技能包>/boards/项目管理界面/project-board.py</code></li>
|
<li>后端:<code><技能包>/boards/项目看板/project-board.py</code></li>
|
||||||
<li>启动器:<code><技能包>/boards/项目管理界面/project-board-launch.py</code></li>
|
<li>启动器:<code><技能包>/boards/项目看板/project-board-launch.py</code></li>
|
||||||
</ol>
|
</ol>
|
||||||
<p style="margin:10px 0 0">
|
<p style="margin:10px 0 0">
|
||||||
技能包默认根:<code>E:/ProgramData/.workbuddy/skills/session-mechanism</code>
|
技能包默认根:<code>E:/ProgramData/.workbuddy/skills/session-mechanism</code>
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""项目管理界面 —— **工作区侧的落点(薄转发)**。
|
"""项目看板 —— **工作区侧的落点(薄转发)**。
|
||||||
|
|
||||||
🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中,
|
🔴🔴 2026-10-14:看板**整包搬进会话技能**(用户令「把这两个看板都纳入会话技能中,
|
||||||
分两个看板文件夹,开个 boards 文件夹放两个看板」)⇒ **真身**在
|
分两个看板文件夹,开个 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
|
from pathlib import Path
|
||||||
|
|
||||||
HERE = Path(__file__).resolve().parent
|
HERE = Path(__file__).resolve().parent
|
||||||
WS = HERE.parents[1] # <ws>/交付物/项目管理界面 → <ws>
|
WS = HERE.parents[1] # <ws>/交付物/项目看板 → <ws>
|
||||||
DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism")
|
DEFAULT_SKILL = Path(r"E:/ProgramData/.workbuddy/skills/session-mechanism")
|
||||||
|
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ def _skill_root() -> Path:
|
|||||||
|
|
||||||
|
|
||||||
SKILL = _skill_root()
|
SKILL = _skill_root()
|
||||||
BOARD_DIR = SKILL / "boards" / "项目管理界面"
|
BOARD_DIR = SKILL / "boards" / "项目看板"
|
||||||
TARGET = BOARD_DIR / "project-board.py"
|
TARGET = BOARD_DIR / "project-board.py"
|
||||||
|
|
||||||
# ── 变量(⛔ 不覆盖宿主已设的;计划任务动作没有 env 字段 ⇒ 只能在本进程里设)──
|
# ── 变量(⛔ 不覆盖宿主已设的;计划任务动作没有 env 字段 ⇒ 只能在本进程里设)──
|
||||||
Reference in new issue
Block a user