session-mechanism:两个看板整包搬进 boards/(页面与脚本同处一包)
用户令:「把这两个看板都纳入会话技能中,分两个看板文件夹,开个 boards 文件夹放两个看板」
「1 boards 2 A」(文件夹名 boards;本区部署与计划任务本轮一起改)
## 分层(新增第三层)
scripts/ = 可执行程序(被计划任务/hook 调)
assets/ = 静态素材(样式、模板)
boards/ = 自带页面的看板程序(一个看板一个文件夹,页面+脚本同处一包)
## 动了什么
* boards/会话看板/(6 文件):board.py / board_ext.py / board-launch.py /
board-launch.py.tpl / board.html / board-render-probe.js(从 scripts/ 与 assets/ 搬入)
* boards/项目管理界面/(3 文件):project-board.py / project-board.html /
project-board-launch.py(从工作区 交付物/项目管理界面/ 复制入)
## 搬迁带出的真缺陷(已修,非补丁)
* board.py:「与 collabd.py 同目录」这个前提搬走后不成立 ⇒ 原来会**静默**落到
本地抄的那份判据(自测「两侧共用同一实现」判 FAIL,但看板照跑、肉眼看不出来)。
改成候选表(同目录 → 包内 scripts/ → DSH_SKILL_ROOT/scripts/),并在兜底分支**写 stderr 留痕**。
* board.py:CFG_P 同样按 HERE 找配置 ⇒ 与 collabd.py::load_cfg() 对齐查找顺序。
* selftest.py:一个 H 指两处的假设(board.py 与 collabd.py 同目录)拆成 H/B 两参数;
board.html / board.py 全部改走 BOARD_DIR / board_py()。
## 顺带修一条既有 FAIL(与搬迁无关)
* 判据锚点没跟文档改:supervise-persistence.md 措辞在 053a6a6 已改成
「排期按点拉起主会话这条路不存在」,判据仍锚旧句 ⇒ 恒红。判据改成锚档内现存那句。
## 验收
* selftest:--filter 看板 PASS 110 / FAIL 0(报告型 1 条不计入);
全量 PASS 91 / FAIL 1(同一条报告型,实质 FAIL 0)。
* 会话看板 board.py --out ⇒ 50515 字节快照,无「回落本地判据」告警(证明真从 collabd.py 取)。
* 项目管理界面 --once ⇒ 4 个项目全列出;HTTP / 200 · 54102 字节(=技能包真身那份)·
/api/projects 出数据 · /healthz ok。
This commit is contained in:
1 parent
5d16c6df70
commit
52566c79f9
16 files changed
+2044
-92
No files matched your search
@@ -216,7 +216,7 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
| 启动器 | 服务的程序 | 进程内必须设 | ⛔ 缺了会怎样 |
|
||||
|---|---|---|---|
|
||||
| `scripts/supervise-launch.py` | 协作程序(`collabd.py --supervise`) | **`CODEBUDDY_CONFIG_DIR`** + `COLLABD_CONFIG` + `PYTHONIOENCODING` + 兜 `stdout/stderr` | **检查程序静默失效**(读 0 字节空库 ⇒ `no such table: sessions` ⇒ fail-safe 恒判"有会话"⇒ **再也不建检查会话**) |
|
||||
| `scripts/board-launch.py` | 看板(`board.py --serve 20099`) | `COLLABD_CONFIG` + `PYTHONIOENCODING` + 兜 `stdout/stderr` | **看板崩溃重启循环**(`已拒跑`)、**20099 从没绑上** |
|
||||
| `boards/会话看板/board-launch.py` | 看板(`board.py --serve 20099`) | `COLLABD_CONFIG` + `PYTHONIOENCODING` + 兜 `stdout/stderr` | **看板崩溃重启循环**(`已拒跑`)、**20099 从没绑上** |
|
||||
|
||||
🔴🔴 **两条"起法"必须收敛成同一个(P0-74)**:机制里**曾经有第二条起法** ——
|
||||
`collabd.py` 的 `_escalate_to_keeper()`(自我供给旁路)会建 `collabd-supervise-<区>` 任务,
|
||||
@@ -344,11 +344,11 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
>
|
||||
> **二之二、🔴 顺带查清的判据:「改看板要不要重启」有四类答案,混成一句话就是误导**
|
||||
> (用户第二句纠正:「**看板每次修改都不处理看板**」⇒ 我把"改配置要重启"说成了"改看板都要重启",**是分类错误**):
|
||||
> · 改 `assets/board.html` ⛔ **不用**(`board.py:1293` `serve()` 里 `html_p.read_bytes()` **每请求实时读盘**;
|
||||
> · 改 `boards/会话看板/board.html` ⛔ **不用**(`board.py:1293` `serve()` 里 `html_p.read_bytes()` **每请求实时读盘**;
|
||||
> `/board.json` 带 `html_sig`(`mtime.size`)⇒ 页面自动重载)—— 现跑实证 `tmp/_probe_hotreload.py`:
|
||||
> 改 `<title>` 插标记 → ⛔ 未重启 → 页面立即含标记(md5 已还原一致 ✔)。
|
||||
> · 改 `.workbuddy/collab/board_ext.py` ⛔ **不用**(`EXT_CACHE` 按 `(mtime,size)` 签名**热重载**,`board.py:855-870`)。
|
||||
> · 改 `scripts/board.py` 自身 ✅ **必须**(进程里是启动那一刻载入的旧代码)。
|
||||
> · 改 `boards/会话看板/board.py` 自身 ✅ **必须**(进程里是启动那一刻载入的旧代码)。
|
||||
> · 改 `collabd.config.json` ✅ **必须**(`C = _cfg()` 在 `board.py:81` **模块级执行一次**,⛔ 无 re-read 路径)。
|
||||
> ⇒ **判据=先答"这个文件是谁在读、什么时候读"**;⛔ 别把"改了 X"与"改看板"当同一件事。
|
||||
> ⇒ 全文 ⇒ `references/pitfalls.md` **P0-38**(与 P0-17/P0-33 同族但**方向相反**:那两条讲"该重启却没重启",
|
||||
@@ -426,6 +426,7 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
🔴🔴 **未装即装(2026-10-14 用户令)**:用户说「使用项目机制完成目标:XXXX」而本区没装 ⇒ **先 `--apply --workspace <本区根>` 装好再干活**(判据与停止线见上面「第 0 步的连体动作」)。
|
||||
🔴 **`--workspace` 要点名本区绝对路径**:`roots.env` 里 `DSH_WS_ROOT` 可能指向别的工作区(实测本机指向 `ai1net-dsh-server`)⇒ ⛔ 不让它顶替,装到别区 = 静默错归属。
|
||||
🔴 **包内目录怎么分(2026-10-11 用户令:「脚本是脚本 配置是配置」)**:**每台机器各不同**的配置一律放本包 **`env/`**(`env/roots.env` 本机生成、不入库;`env/roots.env.example` 是入库样例);`scripts/` 只留通用代码。仓根 `.gitignore` 只放行 `env/**/*.example`。
|
||||
🔴🔴 **看板一律进 `boards/<看板名>/`(2026-10-14 用户令:「把这两个看板都纳入会话技能中,分两个看板文件夹」)**:**自带页面的看板程序**(页面 + 脚本 + 启动器)**整包**放本包 `boards/` 下一个看板一个文件夹 ⇒ ⛔ 别把看板的 `.py` 散在 `scripts/`、页面散在 `assets/`(那样一个看板的东西分两处,改的时候必漏)。现有两个:`boards/会话看板/`(会话架构看板 · 端口 20099)/`boards/项目管理界面/`(项目+任务看板 · 端口 20100)。🔑 判据:**装进来的是"一个能跑起来的界面"⇒ 进 `boards/`;是"被别的程序调用的机制代码"⇒ 进 `scripts/`;是"纯样式或模板"⇒ 进 `assets/`**。
|
||||
|
||||
**⓪ 我要动手(建判据/写验收/报"已完成"/任何带"现在·已·还差"的结论)** ⇒ **先读 `references/00-动手前必过.md`**(🔴 **动手层**,2026-10-04 建,只有三条动作:① 查状态**问程序自己**,⛔ 不许 glob/手拼路径 ② 引用任何读数**先看它什么时候写的** ③ 写判据**先让基线全绿**再谈抓得住 —— 每条都对应当天真实翻车,且都已落判据不许退化)。
|
||||
|
||||
@@ -640,9 +641,9 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
|
||||
**病根**:同一条「这条验收算不算过」的判据,曾在**三处各写一遍**,于是必然漂移:
|
||||
|
||||
1. `scripts/board.py` → `acc_is_pass()`(**唯一实现,改判据只改这里**)
|
||||
1. `boards/会话看板/board.py` → `acc_is_pass()`(**唯一实现,改判据只改这里**)
|
||||
2. `scripts/collabd.py` → `_acc_is_pass()`(**只转发 board,⛔ 不许自己写词表**)
|
||||
3. `assets/board.html` → `accIsPass()`(前端跑不了 Python ⇒ **抄同一份白名单**)
|
||||
3. `boards/会话看板/board.html` → `accIsPass()`(前端跑不了 Python ⇒ **抄同一份白名单**)
|
||||
|
||||
**白名单(全库唯一)**:`pass` / `过` / `通过` / `达` / `达标` / `合格` / `完成`
|
||||
(Python 侧常量 `ACC_PASS_WORDS`;JS 侧常量 `ACC_PASS_WORDS` —— 两处**必须逐字相同**。)
|
||||
@@ -801,7 +802,7 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
· **派活** ⇒ 自动化(**唯一能开新会话的通道**;⛔ 钩子做不到)。
|
||||
· **收结果** ⇒ 直读宿主库(0 token)。
|
||||
· **机械判定** ⇒ 下沉到本地只读程序(`collabd.py` / `board.py` / `goalctl.py`)。
|
||||
· **人看的** ⇒ 只有一个看板(`assets/board.html` + `board_ext.py`)。
|
||||
· **人看的** ⇒ 只有一个看板(`boards/会话看板/board.html` + `board_ext.py`)。
|
||||
|
||||
**铁律(全部实测得来)**
|
||||
- ⚠️ **【2026-10-03 口径已改 · 本条「四类」部分作废】** 现行=**两类**(① 主会话 ② 任务会话;唤醒会话/跟进会话/队列上报**整套退役**)⇒ 以**文首口径块**为准,⛔ **别照本条去建会话**。(原文保留仅为留痕,⛔ 不删。)
|
||||
@@ -902,7 +903,7 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话"
|
||||
· 🔴🔴🔴 **全局只允许一个看板 / 一个常驻(用户 2026-10-04 21:0x 定案,逐字:「看板 包括常驻 按现在的方式启动,全局只允许一个,把规则记录下来」)**:
|
||||
**现状即标准** —— 就是本轮已经跑通并取证的那一套,⛔ 不要再发明第二套。
|
||||
- **看板载体**:计划任务 **`dsh-board-keepalive`(🔴 全局唯一一条,⛔ 不每区一个 —— 2026-10-05 收敛,旧名 `dsh-board-20099` 已禁用)**。
|
||||
· 🔴🔴 **动作 = `pythonw.exe` 起"启动器" `scripts/board-launch.py`**(⛔ **不许直起 `board.py`**)。
|
||||
· 🔴🔴 **动作 = `pythonw.exe` 起"启动器" `boards/会话看板/board-launch.py`**(⛔ **不许直起 `board.py`**)。
|
||||
**为什么(2026-10-05 实测)**:直起 ⇒ **崩溃重启循环、20099 从没绑上**。现场输出:
|
||||
`⚠️ collabd:未找到部署配置(COLLABD_CONFIG 未设)⇒ 已拒跑` —— `board.py` 顶层用
|
||||
**`COLLABD_CONFIG`** 定位配置(它要 `import collabd.py`),而**计划任务的动作里没有 env 字段**
|
||||
|
||||
Reference in new issue
Block a user