feat(task-worktree): 桥接 DSH worktree 插件——补共享联接、锁归属 pw:<name>、修释放不掉
诉求最初是升级 dsh-task-worktree:实测已装 0.4.6 = npm dist-tags.latest,无需升级; 真正的缺口是本仓 skill 看不见插件建的树(.dsh-worktrees/),故按用户追加指令把两套 系统接起来。回收方向刻意不打通:本 skill 永不删插件的树。 脚本 task_worktree.py:新增 plugin 子命令 list/adopt/unadopt,事实源是 git worktree list(不是插件 manifest,免得被绕过);adopt 只补缺失的 .venv 与 simulator/SDL2 联接,已有联接跳过、实体目录绝不碰;锁归属用 pw:<name> 前缀;new 顺带提示另有 N 棵 插件树、不占活跃上限 3。 一并修一处真 bug:lock release --bench-pass 在任务无台账时先 EnvError 退出、锁释放 不掉,导致每个任务的 done 收口连坐失败;现在改为警告后仍然释放。 keil-build:default_lock_task() 增加 .dsh-worktrees/ 反推分支,插件树内的构建归属 pw:<name> 而不是兜底的 build-cli(主树行为未变,本次 @build 实测仍走 build-cli)。 .gitignore 预先忽略 .dsh-worktrees/,让插件的 ensureIgnored() 找到同一字面量、不再 改写这份受控文件。check_doc_links / check_layer_deps / gen_refgraph 三处扫描面同步 排除:仓里再放一份仓会让 doc-links 假红、并让生成的配图字节漂移到 generated-fresh。 文档:并行任务工作树方案新增 §3.4 两套系统边界对照;SKILL.md 加 §F 共存一节,同时把 §B 从 53 行压到 29 行(净 +39,用户此前在飞的改写已 rebase 保留、未被覆盖)。 验证:@build 0 错误 0 警告;scripts/ci_local.py 48 根提交期钩子与 gitlint 全绿; check_doc_links --all --sections-strict 通过(2596 章节引用、无法判定 0);id-check-new 通过;改动文件字节体检无 BOM、CRLF 与 U+FFFD。桥接行为在临时 scratch 仓端到端跑过 (adopt 建两个 reparse、unadopt 只摘联接、pw 锁取放、缺台账也能释放、越界 name 退 2)。
This commit is contained in:
@@ -96,6 +96,29 @@ D:/Code/DTU Code/
|
||||
> ⚠ MSYS 的 `rmdir` 拒绝摘除联接(把它当符号链接),手工清场要用 Python 的 `os.rmdir`
|
||||
> 或直接走本 skill 的 `abort` / `done`。
|
||||
|
||||
### 3.4 与 DSH worktree 插件的边界(2026-10-29)
|
||||
|
||||
本仓现在有**两套**隔离空间并存,这是**有意接受**的现状,不是待清理的重复建设:
|
||||
|
||||
| 维度 | 本方案(`@task` skill) | DSH 插件 `dsh-task-worktree` |
|
||||
|---|---|---|
|
||||
| 树的位置 | 仓库外 `../_wt/`(§3.1) | 仓库内 `.dsh-worktrees/worktree/`(插件写死,不可配置) |
|
||||
| 面向的粒度 | 任务(周级、要合并回主干、要过门禁) | 会话(一次对话一个空间,零命令起步) |
|
||||
| 生命周期属主 | 本 skill 的 `new`/`done`/`abort` + `_wt/.state/` 台账 | 插件自己的 `manifest.json` + `/worktree` 收尾命令 |
|
||||
| 分支命名 | `task/<ID>-<slug>` | `worktree/<name>` |
|
||||
|
||||
两条**并发红线由本方案单方守住**(插件不感知):`build`(UV4 单实例)与 `bench`(COM6 / ST-LINK /
|
||||
设备 IP 唯一)这两把锁的位置与 TTL 口径见 §7.1 / §7.2——插件树里跑 `@build` 时,`keil_build.py`
|
||||
会照旧自持自释,持有者名从 cwd 反推为 `pw:<name>`;`bench` 仍须手工占同一个名。共享联接(§3.3)
|
||||
插件不会建,由 `@task plugin adopt <name>` 补。
|
||||
|
||||
**为什么允许它在仓内破例**(与 §10「绝不在仓库内部」的口径冲突处):路径根写死在插件里,且暴露给
|
||||
模型的工具只有 create/list/status 三个。兜法是把该目录登记进**全库扫描**的排除面(`check_doc_links`
|
||||
的 `SKIP_PARTS`、`gen_refgraph` 的 `EXCLUDE_DIRNAMES`、`check_layer_deps` 的 `os.walk` 兜底)并在
|
||||
`.gitignore` 里**预置**同名规则(否则插件首次建树时会往 `.gitignore` 追加一行,等于会话中途改受控文件)。
|
||||
操作层的命令与判据 → `.dsh/skills/task-worktree/SKILL.md` F 节(本文只记边界,不重述步骤)。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. 分支模型
|
||||
|
||||
Reference in New Issue
Block a user