diff --git a/product-planning/SKILL.md b/product-planning/SKILL.md index d5cb680..a1d86d8 100644 --- a/product-planning/SKILL.md +++ b/product-planning/SKILL.md @@ -127,7 +127,7 @@ DESIGN.md 说明:`@google/design.md` 提供 `lint` / `diff` / `export` / `spec ## 可调用工具(自然语言触发) -> 两个独立工具,按用户说法直接触发,产物落项目目录。`design-capture` 随③段携带(装在③段 `references/stage-delivery/assets/` 下);`video-capture` 2026-10-11 已独立成全局技能(装在用户技能仓 `E:/ProgramData/.workbuddy/skills/video-capture/`),跨段复用。两者都不单独成段。 +> 两个独立工具,按用户说法直接触发,产物落项目目录。`design-capture` 随③段携带(装在③段 `references/stage-delivery/assets/` 下);`video-capture` 2026-10-11 已独立成全局技能(装在**技能根**下的 `video-capture/`),跨段复用。两者都不单独成段。 | 用户说 | 触发工具 | 做什么 | 产物 | |---|---|---|---| @@ -186,7 +186,7 @@ DESIGN.md 说明:`@google/design.md` 提供 `lint` / `diff` / `export` / `spec - 不做八股:不介绍方法论来源,不列人名,不复述框架历史,直接给结论。 - ⭐ 内容准则:一切落盘文字都要先过「说人话」这一关(2026-10-07 用户定案,同日扩大到规则文件)。用户原话:「当作第一步 和 第二步 生成文档时 必须遵循的内容准则」「不管是写规则 还是 写文档 都要严格按照说人话的技能去执行」。 - 适用面两类都算,只改产出不改规则等于半改。一是产出文档:`research/1a-需求文档.md` 到 `1e-使用场景.md`(5 份)、`research/1b-独立分析/`(独立分析体)、`prd/2a-产品功能.md` 与 `prd/2b-界面布局.md`(2 份)。二是规则本身:本技能包内的一切落盘文字,`SKILL.md`、`references/**`、模板与清单。 - - 判据来源(单一可信源,本文件不复述模式清单):`humanizer`(55 条模式、5 种口吻档 casual / professional / technical / warm / blunt),`humanizer-zh`(24 条模式、快速检查清单、50 分制评分)。两份技能都在 `E:/ProgramData/.workbuddy/skills/`,完整判据以源技能正文为准。 + - 判据来源(单一可信源,本文件不复述模式清单):`humanizer`(55 条模式、5 种口吻档 casual / professional / technical / warm / blunt),`humanizer-zh`(24 条模式、快速检查清单、50 分制评分)。两份技能与本技能**同处一个技能根**(`<技能根>/humanizer/`、`<技能根>/humanizer-zh/`),完整判据以源技能正文为准。 - 取哪一份(2026-10-08 补):**模式清单取 `humanizer`**(它另有 `references/patterns.zh.md`,中文产出读那一份);**评分与门槛取 `humanizer-zh`** 的五维表。两份口径冲突时以 `humanizer-zh` 为准 —— 本项目产出是中文。 - 门槛:按 `humanizer-zh` 五维评分(直接性 / 节奏 / 信任度 / 真实性 / 精炼度)≥45 / 50 才准落盘;低于 45 回炉重写。 - ⛔ 取不到判据来源时(2026-10-08 补):两份技能都不在位或读不到 ⇒ **不许凭感觉判「这条够人话」**。在段末报告与 `3d-审查报告.md` 里明写「无判据来源,本项未判」,按与 §供给·工艺数值判据 的「证据缺口」同一口径处理。 @@ -200,6 +200,7 @@ DESIGN.md 说明:`@google/design.md` 提供 `lint` / `diff` / `export` / `spec - 必须落盘:产出写入文件,不要只在对话里输出。 - 无来源就标注:任何查不到来源的数据都标为「估算」并写明口径,不编造数字当事实。 - 禁止长文:单份产出物默认一页纸(≤120 行),超长必须拆分。 +- 🔴 路径写相对或占位(2026-10-14 用户令):本包内一切文字(`SKILL.md`、`references/**`、脚本与注释、模板)引用**本技能自己或同根技能**的位置时,写相对形态 —— 同根技能写 `<技能根>/<技能名>/`,本包自己的文件写包内相对路径(如 `references/stage-delivery/`)。只有**跨根引用**(工作区根、文档库根、本机软件安装位这类从本包推不出来的别的根)才落到具体位置,且优先读环境变量(`DSH_WS_ROOT` / `DSH_DOCS_ROOT` / `WORKBUDDY_BIN_ROOT`)。原因:技能根的位置随环境变(全局技能根还是工作区技能根、用户名与盘符各不相同),写死了换台机器就是死路径,跨环境会整片报错。 ## 每段的标准收尾格式 @@ -262,4 +263,4 @@ python scripts/check_naming.py --ws <工作区> 脚本输出里的 `[提示]` 项(旧名出现)不计入失败,但要人工看一眼是不是落在「废止理由块」里——落在里面是正当留痕,散落在正文里就是真残留。 -2026-10-07 起本技能只在全局一份:`E:/ProgramData/.workbuddy/skills/product-planning/`。它就是本体,不再有「主 / 副 / 装入」三副本,也不再需要「三处 md5 复核」(那只在有副本时才有意义)。改完只跑一次 `check_naming.py --ws <工作区>`。用户原话:「把产品规划复制到 workbuddy 全局skills中 后续维护和使用全局技能」。工作区原先那三份已归档到 `归档/技能迁全局-20261007/`(未直删,可随时取回)。 +2026-10-07 起本技能只在全局一份:技能根下的 `product-planning/`。它就是本体,不再有「主 / 副 / 装入」三副本,也不再需要「三处 md5 复核」(那只在有副本时才有意义)。改完只跑一次 `check_naming.py --ws <工作区>`。用户原话:「把产品规划复制到 workbuddy 全局skills中 后续维护和使用全局技能」。工作区原先那三份已归档到 `归档/技能迁全局-20261007/`(未直删,可随时取回)。 diff --git a/product-planning/references/_留痕/SKILL-总入口-20261007改说人话前.md b/product-planning/references/_留痕/SKILL-总入口-20261007改说人话前.md index c92ff85..dcf4b05 100644 --- a/product-planning/references/_留痕/SKILL-总入口-20261007改说人话前.md +++ b/product-planning/references/_留痕/SKILL-总入口-20261007改说人话前.md @@ -177,7 +177,7 @@ description: 产品规划总入口(唯一入口),四段式调度:① 产 - **不做八股**:不介绍方法论来源,不列人名,不复述框架历史。直接给结论。 - ⭐⭐ **内容准则:一切落盘文字都要先过「说人话」这一关(2026-10-07 用户定案;同日扩大到规则文件)**。用户原话:「**当作第一步 和 第二步 生成文档时 必须遵循的内容准则**」+「**不管是写规则 还是 写文档 都要严格按照说人话的技能去执行**」。 - **适用面(两类都算,⛔ 只改产出不改规则=半改)**:① **产出文档** —— `research/1a-需求文档.md` — `1e-使用场景.md`(5 份)+ `research/1b-独立分析/`(独立分析体)+ `prd/2a-产品功能.md` — `prd/2b-界面布局.md`(2 份);② **规则本身** —— 本技能包内的一切落盘文字:`SKILL.md`、`references/**`、模板与清单。 - - **判据来源(单一可信源,本文件不复述模式清单)**:`humanizer`(55 条模式 · 5 种口吻档 casual / professional / technical / warm / blunt)+ `humanizer-zh`(24 条模式 · 快速检查清单 · 50 分制评分)。两份技能都在 `E:/ProgramData/.workbuddy/skills/`;完整判据以源技能正文为准。 + - **判据来源(单一可信源,本文件不复述模式清单)**:`humanizer`(55 条模式 · 5 种口吻档 casual / professional / technical / warm / blunt)+ `humanizer-zh`(24 条模式 · 快速检查清单 · 50 分制评分)。两份技能与本技能**同处一个技能根**(`<技能根>/humanizer/`、`<技能根>/humanizer-zh/`);完整判据以源技能正文为准。 - **门槛**:按 `humanizer-zh` 五维评分(直接性 / 节奏 / 信任度 / 真实性 / 精炼度)**≥45 / 50** 才准落盘;低于 45 回炉重写,不给"差不多"放行。 - **五条核心原则**(源技能《核心规则速查》摘引):**删填充短语**(开场白、强调性拐杖词)|**打破公式结构**(二元对比、戏剧性分段、修辞性设置)|**变化节奏**(长短交错,两项优于三项,段尾多样)|**信任读者**(直接陈述事实,跳过软化、辩解、手把手引导)|**删金句**(读起来像可引用的话,就重写它)。 - **交付留证**:产出文档在段末报告里写明"已过内容准则,评分 X/50";改规则文件时,同样要在当日 memory 里记下这一关过了。⛔ 没写等于没做。 @@ -248,7 +248,7 @@ python scripts/check_naming.py > 例如「②段到底该不该给页面结构」这种反转,**闸门一个字都报不出来**(两版写法都合法)。 > ⇒ **口径类改动要靠人工回读**,且**必须把反转理由与用户原话写进文档留痕**。 ⚠️ 脚本输出里的 `[提示]` 项(旧名出现)**不计入失败**,但要人工看一眼是不是落在「废止理由块」里 —— 落在里面是正当留痕,散落在正文里就是真残留。 -🔴 **2026-10-07 起本技能只在全局一份**:`E:/ProgramData/.workbuddy/skills/product-planning/` —— +🔴 **2026-10-07 起本技能只在全局一份**:技能根下的 `product-planning/` —— **它就是本体**,⛔ 不再有「主 / 副 / 装入」三副本,也⛔ 不再需要「三处 md5 复核」 (那只在有副本时才有意义)。改完**只跑一次**:`check_naming.py --ws <工作区>`。 > 用户原话:「**把产品规划复制到 workbuddy 全局skills中 后续维护和使用全局技能**」。 diff --git a/product-planning/references/stage-delivery/assets/video-capture/SKILL.md b/product-planning/references/stage-delivery/assets/video-capture/SKILL.md index 879c71a..37cc08a 100644 --- a/product-planning/references/stage-delivery/assets/video-capture/SKILL.md +++ b/product-planning/references/stage-delivery/assets/video-capture/SKILL.md @@ -4,7 +4,7 @@ ## 新位置(权威件) -- 技能根:`E:/ProgramData/.workbuddy/skills/video-capture/` +- 技能根:`<技能根>/video-capture/`(技能根=与本技能同级的那个目录,位置随环境变) - `SKILL.md` —— 触发词、两步用法、抽帧算法铁律、边界 - `scripts/fetch_video.py` —— 取视频(本地文件 / 直链 URL) - `scripts/extract_frames.py` —— 抽帧(双因素 + 首尾 + 补帧),产 `c_<序号>_<真实秒数>s.jpg` + `frame_times.json` diff --git a/product-planning/scripts/check_naming.py b/product-planning/scripts/check_naming.py index 73ce97e..44dcff1 100644 --- a/product-planning/scripts/check_naming.py +++ b/product-planning/scripts/check_naming.py @@ -390,8 +390,8 @@ def main(): skill_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 🔴🔴 2026-10-07 技能迁全局后的**必须修正**: # 旧写法 `ws = os.path.dirname(skill_root)` 是按「技能包在工作区根」写的。 - # 技能搬到 `E:/ProgramData/.workbuddy/skills/product-planning/` 之后, - # `ws` 会算成 `E:/ProgramData/.workbuddy/skills` ⇒ **`docs/pm/*` 一个都扫不到** + # 技能从工作区搬到技能根(`<技能根>/product-planning/`)之后, + # `ws` 会算成技能根 ⇒ **`docs/pm/*` 一个都扫不到** # ⇒ `check_whitelist()` 静默扫零个目录、**恒绿通过**(假绿比报红更危险)。 # ⇒ 工作区一律**显式给**:`--ws <工作区>`;没给就向上找「含 docs/pm 的那一层」, # 再找不到就**明确报 FAIL**,⛔ 绝不静默跳过。 diff --git a/session-mechanism/SKILL.md b/session-mechanism/SKILL.md index 687ee85..18f0e95 100644 --- a/session-mechanism/SKILL.md +++ b/session-mechanism/SKILL.md @@ -433,10 +433,10 @@ python .workbuddy/collab/collabd.py --set-life 进行中 --by "主会话" 🔴🔴 **看板一律进 `boards/<看板名>/`(2026-10-14 用户令:「把这两个看板都纳入会话技能中,分两个看板文件夹」)**:**自带页面的看板程序**(页面 + 脚本 + 启动器)**整包**放本包 `boards/` 下一个看板一个文件夹 ⇒ ⛔ 别把看板的 `.py` 散在 `scripts/`、页面散在 `assets/`(那样一个看板的东西分两处,改的时候必漏)。现有两个:`boards/会话看板/`(会话架构看板 · 端口 20099)/`boards/项目看板/`(项目+任务看板 · 端口 20100)。🔑 判据:**装进来的是"一个能跑起来的界面"⇒ 进 `boards/`;是"被别的程序调用的机制代码"⇒ 进 `scripts/`;是"纯样式或模板"⇒ 进 `assets/`**。 🔴🔴 **路径一律用相对(2026-10-14 用户令:「会话技能中 能用相对路径的都要用相对路径」)**:包内脚本引用**自己的**文件(`scripts/`、`boards/`、`references/`、`assets/`)一律从 `__file__` 上跳推导,⛔ **不写盘符、不写用户目录**。🔑 **判据问一句:「这个根能不能从『我自己的位置』推出来?」** -- **能**(本包自己的目录)⇒ 推导。例:`boards/项目看板/project-board.py` 取包根=`HERE.parent.parent`(上跳两级),⛔ 不写 `"E:/ProgramData/.workbuddy/skills/session-mechanism"`。 +- **能**(本包自己的目录)⇒ 推导。例:`boards/项目看板/project-board.py` 取包根=`HERE.parent.parent`(上跳两级),⛔ 不写 `<技能根>/session-mechanism/` 这样的绝对路径。 - **不能**(工作区根、文档库根、宿主配置目录 —— 技能包跟它们**没有任何相对关系**)⇒ 那是「本机各不同的配置」⇒ **读本包 `env/roots.env`**(`DSH_AIROOT`/`DSH_WS_ROOT`/`CODEBUDDY_CONFIG_DIR`/`DSH_DOCS_ROOT`),⛔ 不在代码里留盘符字面量。 - **推不出来 ⇒ 如实报错 + 留痕**(⛔ 不许静默扫空 —— "扫不到"与"本机真没有"表现完全一样,是最难查的一类假象)。 -- ⚠️ **文档/注释里的绝对路径不在此列**(举例、历史取证、报障记录照写 —— 那是证据,改了反而不忠实)。本条只管**会真正被执行的代码**。 +- ⚠️ **例外只有一类:跨根引用**(2026-10-14 用户令)—— 工作区根、文档库根、本机软件安装位、宿主数据目录,这些是**从本包推不出来的别的根** ⇒ 才落到具体位置,且优先读环境变量。**技能根(本包自己 + 同根技能)的绝对路径一律不写**,⛔ **连文档、注释、留痕里也不写**(举例、判据来源、引用同根技能,一律写 `<技能根>/<技能名>/` 占位形态)。原因:技能根的位置随环境变(全局技能根还是工作区技能根、用户名与盘符各不相同),写死了换台机器就是死路径,跨环境读起来整片报错。 - 📌 落点:`boards/项目看板/project-board.py`(`_sm_load_roots()` + 技能根上跳两级 + `WS_ROOTS` 从 `DSH_AIROOT` 推导)、`scripts/selftest.py`(生产区定位改为扫 `DSH_AIROOT` 下兄弟区,⛔ 不写死某个区名)。 **⓪ 我要动手(建判据/写验收/报"已完成"/任何带"现在·已·还差"的结论)** ⇒ **先读 `references/00-动手前必过.md`**(🔴 **动手层**,2026-10-04 建,只有三条动作:① 查状态**问程序自己**,⛔ 不许 glob/手拼路径 ② 引用任何读数**先看它什么时候写的** ③ 写判据**先让基线全绿**再谈抓得住 —— 每条都对应当天真实翻车,且都已落判据不许退化)。 diff --git a/session-mechanism/boards/会话看板/board-launch.py.tpl b/session-mechanism/boards/会话看板/board-launch.py.tpl index 23e34b8..4825210 100644 --- a/session-mechanism/boards/会话看板/board-launch.py.tpl +++ b/session-mechanism/boards/会话看板/board-launch.py.tpl @@ -56,7 +56,7 @@ import sys # ── 三处按实际改 ──────────────────────────────────────────────── WS = r"<工作区根,例:E:\ProgramData\AIProject\ai1net-dsh-server>" -BOARD = r"<技能脚本,例:E:\ProgramData\.workbuddy\skills\session-mechanism\scripts\board.py>" +BOARD = r"<技能脚本,例:<技能根>/session-mechanism/scripts/board.py>" PORT = "8788" # ─────────────────────────────────────────────────────────────── diff --git a/session-mechanism/references/deploy.md b/session-mechanism/references/deploy.md index b7f0079..a497792 100644 --- a/session-mechanism/references/deploy.md +++ b/session-mechanism/references/deploy.md @@ -38,7 +38,7 @@ |---|---| | Python | 3.11+(实测 3.13);`ast.parse` 可用的标准库即可,**⛔ 无第三方依赖** | | 宿主 | WorkBuddy 桌面版(需要它的三张只读表 + 自动化排期 + 钩子) | -| 目录 | 把本 skill 放到 `<配置目录>/skills/session-mechanism/`(如 `E:/ProgramData/.workbuddy/skills/`) | +| 目录 | 把本 skill 放到**技能根**下:`<技能根>/session-mechanism/`(技能根=本机配置目录下的 `skills/`,位置随环境变) | --- diff --git a/session-mechanism/scripts/session-rules-check.py b/session-mechanism/scripts/session-rules-check.py index 2d9b737..038d2d2 100644 --- a/session-mechanism/scripts/session-rules-check.py +++ b/session-mechanism/scripts/session-rules-check.py @@ -225,8 +225,8 @@ def _skill_names(): 🔴🔴 2026-10-06 修 **只查全局根 ⇒ 工作区自带技能被判"悬空"(假红,且每轮刷)**。 实测(`vibe-product`):其 `MEMORY.md` 里写「`product-planning/`(工作区根)」, - 而 `product-planning` **只在** `/.workbuddy/skills/` 里 —— 全局库 - `E:/ProgramData/.workbuddy/skills/` 下**没有它**(实测 `ls` = No such file)。 + 而 `product-planning` **只在** `/.workbuddy/skills/` 里 —— 全局技能根 + 下**没有它**(实测 `ls` = No such file)。 ⇒ 旧判据(只 `listdir(SKILLS)`)每轮报「工作区记忆里的技能指针悬空」, 而它惩罚的正是「**工作区自己装的技能**」这种**完全合法**的形态。 diff --git a/video-capture/ATTRIBUTION.md b/video-capture/ATTRIBUTION.md index ae6deed..361890e 100644 --- a/video-capture/ATTRIBUTION.md +++ b/video-capture/ATTRIBUTION.md @@ -20,7 +20,7 @@ ## 沿革 - 2026-10-11:由 `product-planning` 包内的 `stage-delivery/assets/video-capture/` 独立出来, - 装到全局技能仓 `E:/ProgramData/.workbuddy/skills/video-capture/`,原位置改为交接说明。 + 装到**技能根**下的 `video-capture/`,原位置改为交接说明。 (独立原因:该能力跨项目复用;埋在 `product-planning` 的资产目录里时,非产品规划类任务命不中它。) ## 版权 diff --git a/改包纪律.md b/改包纪律.md index 47e660d..487f3a4 100644 --- a/改包纪律.md +++ b/改包纪律.md @@ -41,7 +41,7 @@ `product-planning` 包改完,必跑: ``` -cd E:/ProgramData/.workbuddy/skills/product-planning +cd <技能根>/product-planning E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe scripts/check_naming.py --root . --ws "<工作区绝对路径>" ``` @@ -56,7 +56,7 @@ E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe scripts/ch 体检方法(**比看闸门更早跑**): ``` -cd E:/ProgramData/.workbuddy/skills +cd <技能根> git grep -c "唯一权威处" -- product-planning git log --oneline -3 -- product-planning git diff --stat <上次收口提交> HEAD -- product-planning @@ -81,7 +81,7 @@ git diff --stat <上次收口提交> HEAD -- product-planning 1、**先定性,别急着改**。用可复现的方式坐实「是谁引入的」: ``` -cd E:/ProgramData/.workbuddy/skills +cd <技能根> for c in <上次收口提交> <可疑提交>; do rm -rf /tmp/pp-$c && mkdir -p /tmp/pp-$c git archive $c product-planning | tar -x -C /tmp/pp-$c