记忆:孤儿锁根因查实(宿主 daemon 冷启动重启 ⇒ 会话 terminated ⇒ 无人释放;锁是磁盘持久物、trap 不回收、判定不看死活)+ B 方案已处置(释放锁 2→1、重派补闸门棒 58855437)

This commit is contained in:
WorkBuddy committed 2026-10-09 06:29:01 +08:00
1 parent 56b5f45de8
commit 12f62a2c88
22 files changed
+1675 -1117

No files matched your search

+55 -66
View File
@@ -1,73 +1,62 @@
# content_marketing_agent · 项目长期记忆
# contentm_agent · 项目长期记忆
## MCN 短视频整合营销工作台(项目 slug `mcn-shortvideo-agent`)
> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。
> 整理纪律:**同一件事只在一处写全**,别处只引;细则进当日日志,跨会话有用才上提这里。
> 🔴 **本文件 2026-10-09 压缩过一次**(原 22.5 KB,注入时被截断)。压缩前全量存同目录 `MEMORY-压前全量-20261009.md`。
> ⚠️ 本文件按 ~9 KB 维护:**再加内容先删等量旧内容**,超过就会被截断(等于白写)。
- 产品规划四段流水线,**次序不可跳**:①产品需求(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)→ ②产品功能(功能清单+界面布局)→ ③界面交互 → ④原型说明文档。用户 2026-10-08 定:「应该要先完成 1 2步 在进行第3步」。
- ①段 1a 是**汇总型**需求(不是 grill 澄清产出),落 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`;1b 竞品分析在 `content-workbench` 项目下(`docs/pm/content-workbench/research/1b-竞品分析.md` + `证据附卷/` 5 份独立分析体),跨项目引用、不重写。
- 🔴 ③段设计供给口径(2026-10-08 用户定):**默认主线是 `oil-ui-pro`**(方法+独立评审),定调与令牌取③段自带样式库 `assets/design-systems/`(当前 `design-system-tiaoyue`);**不使用 `open-design`**(2026-10-08 起已由**另一个会话**随③段携带于 `references/stage-delivery/assets/open-design/`,作**可选件**、选了才用;源 `nexu-io/[email protected]`,Apache-2.0 本地裁剪版,64 MB / 4177 文件)。
- ⚠️ 2026-10-08 用户令已**改全局技能文档**(不再是「通则不改」):`product-planning/SKILL.md`、`references/stage-delivery/SKILL.md`、`references/stage-delivery/references/execution-runbook.md` 三份共 17 处,「③段默认主线」由 open-design 翻转成 oil-ui-pro;`open-design` 降为**可选件**(另一会话同期把它随段携带进 `assets/open-design/`,故口径是「选了才用」而非「装了才有」)。三份各写一条统一读法:凡出现 `open-design/...` 路径一律按段内相对路径 `assets/open-design/...` 读。
- 🔴 逐段管理要点:`assets/open-design/` 是**第三方件**,不许改其文件内容;署名见 `assets/open-design/ATTRIBUTION.md`。⚠️ 当前**缺 Apache-2.0 的 LICENSE 全文与上游 NOTICE**(2026-10-08 记账)。
- 🔴 **说人话(`humanizer` / `humanizer-zh`)的处置口径(2026-10-08 用户选 C)**:⛔ **两个技能的内容不整合进 product-planning**,保持「按技能名引用」—— 整合会制造第二处定义(本包「单一可信源」纪律专治此病),且这两个技能是全包乃至跨包通用的(用户 10-07 定案「不管是写规则还是写文档都要按说人话的技能执行」),整合等于把它们降格成附件。分工已写进总入口「执行规则」内容准则条:**模式清单取 `humanizer`**(含 `references/patterns.zh.md`,中文产出读它)|**评分与门槛取 `humanizer-zh`** 五维表(≥45/50)|冲突以 `humanizer-zh` 为准|⛔ **取不到来源时明写「无判据来源,本项未判」,不许凭感觉放行**。两技能早已入库(`777f7fe`,9 个文件),技能仓提交 `8b655ab`。
- ⚠️ 全局技能包被多会话并发写:2026-10-08 02:2x 实测「本会话」与「另一个会话」同时在改 `stage-delivery/SKILL.md` / `execution-runbook.md` / `layouts-tooling.md` ⇒ 改前先看 mtime,改后必复跑 `check_naming.py`(该脚本只读、不写盘)。
- 🔴 **③段供给关系 = 单一可信源**(2026-10-08 用户令「按照建议处理」,A 方案已落地):`references/stage-delivery/SKILL.md` 的 `## 供给` 块是**唯一定义处** —— 6 行表:方法主线|定调与令牌|版式骨架|工艺数值判据|独立评审协议|多方向比选。③段其余章节、`references/execution-runbook.md`、`references/layouts-tooling.md`、总入口 `product-planning/SKILL.md`,提到供给**一律引 `§供给·<行名>`**(行名取表左列),⛔ 不许复述「谁是默认/路径在哪/装了才有」。**改供给只改那一块**,改完跑闸门。边界:各档**内部**篇目(如可选档 `craft/xxx.md`)属执行细节,留在 runbook 各步里,不算复述。起因:此前这一个事实被复述约 40 处,改一次动三份文件 17 处仍漏 13 处。
- ⚠️ 闸门 `check_naming.py` **必须带 `--ws`**:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 `通过 2060 | 失败 0 | 提示 25`;⛔ **别给 `--root .`**(那是「技能根」,给了会把工作区当技能包查、满屏 FAIL)。
- 🔴 **MCN 原型的两个硬口径(2026-10-08 修,别再踩)**:
1)**外壳高度链三件套**:`html,body{height:100%;overflow:hidden}` 只写这条 ⇒ `.app` 跟着内容长高、`.view` 自己不滚、滚动落回 `<body>`(`body.scrollTop` 有值而 `window.scrollY` 恒 0),而 body 是 hidden ⇒ **整页「滚不动」而不是「不滚」,折叠线以下的内容永远拿不到**。必须同时写 `.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`。
2)**判据核滚动必须逐个容器核**:只复位/只核对 `window.scrollY` 会给出**假绿**(原型自检曾在 500×844 报「一屏装得下 7 行」,真值不到 1 行)。要核 `window` / `html` / `body` / `.view` 四个量。
⇒ **连带教训**:改门禁后那条**变异注入点也要重指** —— M9 原来注入 `window.scrollTo`,外壳修完后 window 根本滚不动,那条变异变成「抓不到东西的假变异」,已改成注入 `.view.scrollTop`。
- 🔴 MCN 原型密度真边界(2026-10-08 重测):**≥901px 宽达标**(1440/1280/1024 一屏 8 行、1000/960/920/901 七行),**≤900px 不达标**(900 三行、768 两行、641 一行、500×844 零行;P2 在 500×844 也掉到 5 行)。边界=两栏带 `.band` 的收线 `max-width:900px`。旧文档写的「边界 768px」是**假数**产物,已整表替换。
- 🔴 MCN 原型「外部参考版」照搬结论:`3c-GPT参考版.md` 那版 P1 用**满宽表格顺排**,照搬后账号矩阵首行顶 724px ⇒ 一屏只 2 行(契约 ≥6),把行内第二行小字拿掉仍只 4 行 ⇒ **满宽表格与「一屏 ≥6 行」不可兼得**,要兼得得把每格压成一个短值(动②段定的次级信息档位)。已登记、未动。
- 🔴 **学参照物=量到细节,⛔ 不是「知道有这个名字」**(2026-10-08 用户点破:「MCN 工作台里面每个组件的样式 高度 ICON 都是需要学习的,比如功能入口,感觉没有学到细节」)。
教训实例:功能入口卡 `.data-card` —— 名字是从参照物笔记里照抄的,但**图标(22px 单色)/ 内衬 16/18 / 标题 17px / 网格 200px / hover 位移**全丢了,只抄了个「白底 + 标题 + 描述」。
⇒ 定成纪律:**学任何组件都要回源站量**(`style.css` 的行号 + `app.js` 的生成函数),逐项记「参照物原值 / 我方现值 / 学没学 / 为什么」,**「刻意不学」的也要写理由**(⛔ 不许漏掉混过去)。
参照物位置:`E:/ProgramData/AIProject/mcn-short-video/project/短视频脚本创作/V1.0/mcn-work-shop/public/`(只读)。
量到的组件原值存在两处:`ui/布局排版参考-mcn-work-shop.md` §六(摘要)+ `ui/3d-审查报告.md` §十一(全量对照)。**三条刻意不学**:它的冷灰蓝品牌色 / 8 色相图标 / 圆角 12px 体系。
- 🔴 **第 5 个门禁 `ui/_tools/check_js.py`**(2026-10-08 上线):抠 `<script>` 段跑 `node --check` + **多行**扫描 script 区内每个 `<!-- … -->` 块里的**反引号**。
起因:「模板字面量里的 HTML 注释带反引号」这个坑**踩了 4 次**,每次都是页面在浏览器里才炸(白屏 / `xxx is not defined` / `Unexpected identifier`),而 `node --check` 整份 html **报不出来**。
⚠️ 必须**多行**扫 —— 反引号常在注释的**续行**上,单行 grep 抓不到(我自己就漏过一次)。已做变异对照(注入反引号 ⇒ FAIL 2 项、退出码 1)。
⚠️ 另一条硬教训:**几何一改(加图标、改内衬、改网格最小宽),逐视口密度表必须整表重跑** —— 第六轮只量了 1440(697px/6 行 ✅)就往下走,回头发现 640 从 5 行掉到 3 行(卡片变高 + minmax 180→200 让三张卡折成两行)。
- 🔴 **顶栏口径(2026-10-08 第四轮定案)**:顶栏只放**两项** —— 左「MCN 短视频整合营销工作台」(产品名)+ 右「**随手记**」。⛔ 不许再往里加东西。
依据:**②段 `2b` §286 只把「随手记」定为全局可达**(原文「随手记出现在任意页面一次点击内,F2 是 P0,不能埋在两层下」)⇒ 它必须挂全局外壳。其余一律不许挂顶栏。
⛔ **已删的六样,逐样来源**(详细排查在 `3d-审查报告.md` §十):`收起侧栏`(G-11)与**面包屑**来自**本项目参照物笔记** `ui/布局排版参考-mcn-work-shop.md`(⚠️ **它不是规则文件,是素材**);`演示·账号`(G-07)/`演示·状态`(G-09)是我造的原型件(规则只说「状态由**路由 + 演示开关**驱动」,路由那条已完整覆盖);顶栏`全局检索`(G-10)与②段 P1 的**页内板块**重复;`假设 2 项`是我自己挂在顶栏的第二处 → **改挂到「假设」徽章上**(徽章可点,G-08 仍活)。
🔴 两条纪律:①**别把「参照物产品的习惯」当需求搬进外壳**(本轮 6 项里一半是这么来的);②**撤销一个交互 ID 必须同时删掉它的 DOM**,否则判据「页面上每个 data-act 都在清单里」报红。
⚠️ 连带口径:顶栏内衬 8px ⇒ **49px、任何宽度不折行**;页面身份靠页头 h1(不再有面包屑);六态由**路由**进入(`#/p/p4/empty`)。
- 🔴 **导航口径(2026-10-08 第四次改定;层级与命名部分)**:左侧栏 **只有一层=八个功能项**,与②段八页一一对应;**短名一律 2 个字**(总览 / 选题 / 资产 / 创作 / 发布 / 画像 / 复盘 / 对账 —— 2 字是硬上限,见下面那条形态条目);页头仍写②段页面全名。**形态(64px 药丸浮栏、项 56×78、图标 24 + 名字常驻、中性填充当前态)以本文件下面那条「③段侧栏=64px 药丸浮栏」为准** —— ⛔ 不要在这里复述一遍,那是两处口径打架的老毛病。
自检判据:`#nav .nav-item` 恰 8 个、`#nav` 直接子元素全是 `.nav-item`(第二层 0 个)、八项逐个点过都落到自己那页、八页一次点击可达。
⛔ 历史弯路两条,别再走回去:①上一版写成「只有一层=四个大板块」(把「一层」读成「只剩板块、把页面藏起来」);②再上一版把八个页项塞进侧栏但带 240px 宽文字列表。
⚠️ 形态一改,**自检判据的选择器与变异注入点必须跟着改**(本轮 `.nav-flat`→`.nav-item`;M2/M8 注入点重指),否则判据会静默失效变恒绿 —— 这类假绿已经踩过 4 次(M7/M10 上一轮、M2/M8 本轮)。
- 🔴 **左右布局**:每页**都**有一处两栏(`.grid-main-side`,宽比 **1.35fr : .9fr**,照 `3c-GPT参考版` 的 `.grid.cols2`):左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列(与 `.band` 同步)。
- ⚠️ **改原型时的两条硬坑(都踩过)**:① 在 JS 模板字符串里写 HTML 注释,**注释里不许出现反引号** —— 会把模板字面量提前闭合,而 `node --check` 仍通过(`` `x` `` 后接 `.y` 被解析成成员访问)⇒ 页面静默白屏;② HTML 注释**必须写 `-->`**,写成 `*/` 会把后面整段吞成注释。改完先跑 `node --check` 再跑自检。
- ⚠️ **功能入口卡的高度会转嫁给密度契约**:它紧贴「数据统计」下面,卡越高,下面那张「一屏 ≥6 行」的列表首行顶越低。当前靠三处收高(卡内衬 `12/16`、`≤1000px` 隐描述、`≤1024` 顶栏内衬 8px)把边界维持在 **901px**。
- 🔴 **产品规划技能包已立「单一可信源」门禁**(2026-10-08):`check_naming.py` 里的 `AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外任何地方出现复述即 FAIL。当前 9 条:②③边界(权威=②段 §②—③ 交接口)|停线规则(全包禁写,权威=总入口 §执行规则)|可选档骨架名单(权威=`layouts-tooling.md` 开头)|说人话门槛|对比度数值|契约十二字段展开(权威=runbook §2.1)|②③定案原话|1b 定案原话|grill A/B 节火力点。**改这些事实只改权威处,然后跑闸门。**
- 🔴 `DEAD_PATHS` 检查:`strategy/`、`ux/` 这类已废目录形态若出现在正文的产出/只读/必读位置 ⇒ FAIL(已废路径曾 4 处残留且无门禁报)。含废止标记(旧/已废/已改名/曾/移进/改为…)的行豁免。
- ⚠️ 反面教训:`check_naming.py` 曾因**用 stale 变量**(`if old in t` 该用 `tt`,前面还跑了一个只赋值的空循环)导致「旧名提示」**恒不触发**(假绿)。**改门禁后必须做变异对照**:注一条假病进去,确认它真的报红,再还原。
- 真缺口:open-design `craft/` 的 13 份工艺数值判据(反 AI 味/无障碍/表单校验/动效纪律)在没装 open-design 的工作区**无供给来源** ⇒ 明说,⛔ 不编。
- 产物落点:执行期间一律落 `执行会话/目标-<标题前缀>-<sha1(title)[:6]>/`(域门禁+文档合同要求);正式归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 由主会话收口后统一搬。
## 一、仓与位置
- 🔴 **工作区已 git 化**(2026-10-08 08:1x):远端 `[email protected]:admin/contentm_agent.git`(Gitea,SSH deploy key **有写权限**),本地分支 `main`,首次提交 `df56c2c`(1773 文件 / 205 MiB pack)、第二次 **`eee042c`**(10-08 22:xx,③段第八轮收口,48 文件),均已推送。`.gitignore` 排运行时噪音(collab 日志/脚本 `.bak*`/`supervise.pid`/`.workbuddy/tmp/`/`tmp/_*.txt`/`**/ui/_scratch/`/`__pycache__/`/`tmp/_bh_shots/`·`_figma_preview/`·`_gpt_dl/`/`.workbuddy/.load-pending`),**参考资料 231M 抽帧素材全量入库**(⛔ 不打折)。提交者身份是**局部**配置的 `WorkBuddy <[email protected]>`(全局 git config 未动),可推翻。
- 🔴 **全局技能仓**(`E:/ProgramData/.workbuddy/skills`)是**独立仓**:远端 `[email protected]:admin/workbuddy_skills.git`,分支 `master`(⛔ **无 upstream 配置** ⇒ 必须 `git push origin master` 显式推,且 `git status -sb` **不显示 ahead**,别拿它判断同步与否),提交者身份是**全局** `maogeigei <[email protected]>`(与工作区仓的局部 `WorkBuddy` 不同,属正常,⛔ 别"统一")。⚠️ **该仓被多会话并发写、推进以分钟计**:2026-10-08 我推 `44d42b0` 后数分钟内,另一会话又推了 5 个提交(撤销「项目会话」更名 + 141 处说人话替换 / 机制对外改叫「项目机制」 / **把 9 个此前未纳管的技能目录入库 `e03465c`** / 修 draw-ui·oil-motion 的子模块指针),HEAD 已到 `237a09a`。⇒ **本仓任何结论都带时效,用前先 `git log -1` 校准**;那 9 个目录(AI HOT/draw-ui/dsh-* ×6/oil-motion/skills-security-check)**已入库,不再是"未纳管"**。
- 🔴 **并发覆盖实录与 B 方案补落(2026-10-08)**:我第八轮在 `stage-delivery/SKILL.md` 供给块的三处(能力边界 / 九档 / 证据缺口)被另一会话那轮重写覆盖(供给块整体换成另一种表结构),§5.5.2 标题也被换回旧写法,还留下一段**重复的「实证」**。用户选 B 方案后由其转告「另一会话已完成」,**核实现场不符**(HEAD 与 mtime 都没动、远端无新提交)⇒ 本会话于 22:4x 补落(提交 `46bee95`):四处锚点全部回填 + 清掉重复实证行。⛔ 判"改动是否还在"一律 `git show HEAD:<文件> | grep`,⛔ 别看 `--stat` 行数。⚠️ 教训:同批改动里我自己顺手列了那 8 个骨架名,撞上「名单只许在 layouts-tooling 开头写一次」的复述禁令 ⇒ **写"不复述"时别把名单抄进来**。
- 🔴🔴 **全局技能包当前版本不是最新调整版(2026-10-08 22:5x 查明,用户追问后坐实)**:`1d7d31a` 提交信息写「说人话新稿按**合并**落地」,实际是**整文件覆盖** product-planning 下 7 个文件 —— 新稿编写时点**早于**被覆盖文件的修改时点,不做三方合并 ⇒ 必丢中间调整。**硬指标:「单一可信源」类声明 5 处 → 1 处**(丢的是 `stage-delivery/SKILL.md` 的 **`## 供给(唯一权威处 · 改供给只改这一块)` 整节标题 + 六行供给表**、`layouts-tooling.md` 开头的名单权威声明、`stage-requirements/SKILL.md` 的②—③交接口声明)。**🔴 供给口径被翻转**:用户定案是「默认主线 = `oil-ui-pro`,`open-design` 只是可选的随段携带件」,当前文件却写「`open-design` = 本段默认主线」。⇒ **凡在本包上干活,先确认基线是不是最新调整版**(拿 `git diff --stat <上次收口提交> HEAD` 与「唯一权威处」计数比);**闸门 12 条 FAIL 的真根因就是这几处权威声明被删,修序必须是「先恢复权威声明、再清复述」**。✅ **2026-10-08 23:0x 已整包回退到 `44d42b0`(技能仓提交 `8fc9a92`),闸门回 `2060 | 0 | 27`,「唯一权威处」2 文件 / `## 供给` 块与六行表 / runbook 两条勾选项 / 3c 四处一致均已回来**;那批「说人话」改写另存于工作区 `归档/技能包-说人话改写-被覆盖存档-20261008/`(对照 diff + 全文 + 用法说明),将来只取措辞、⛔ 不取结构改动。✅ **技能仓根已立 `改包纪律.md`(技能仓提交 `0011050`)**:四条硬纪律(⛔ 不许整文件覆盖 / 落地前比对时点 / 改完必跑闸门 / 收到覆盖性提交先做结构体检)+ 出事后的标准修法,**谁来这个仓干活先读它**。
- 🔴 **闸门 12 条 FAIL 的归因(已坐实)**:由提交 `1d7d31a`(10-08 22:22,作者 maogeigei)**一步引入** —— 验证法(可复现):`git archive <版本> product-planning` 抽出来各跑一次闸门,`44d42b0` ⇒ **全过**、`1d7d31a` ⇒ **失败 12**;且 `git diff --stat 44d42b0..HEAD -- product-planning/scripts/check_naming.py` **为空**(判据零改动,排除"判据变严翻旧账")。该提交改了 product-planning 下 **7 个文件**,性质像**回退**:把「②—③ 交接口(**唯一权威处** · 改边界只改这一块)」的权威声明整段删掉、删掉「为什么立这一块」的立法理由段 ⇒ **权威处声明一弱化,复述就重新长回来**。⛔ 修法顺序:**先恢复权威处声明,再清复述**,反了会反复。⛔ 别默认是"自己上次的债"。
- **工作区仓** `E:/ProgramData/AIProject/contentm_agent`:远端 `[email protected]:admin/contentm_agent.git`(Gitea,deploy key **有写权限**),分支 `main`;提交者身份是**局部** `WorkBuddy <[email protected]>`(全局 git config 未动,可推翻)。参考资料 231M 抽帧素材**全量入库**(⛔ 不打折);`.gitignore` 排运行时噪音。
- 🔴 **全局技能仓** `E:/ProgramData/.workbuddy/skills` 是**独立仓**:远端 `…/admin/workbuddy_skills.git`,分支 `master`,⛔ **无 upstream** ⇒ 必须 `git push origin master` 显式推(`git status -sb` 不显示 ahead);提交者=**全局** `maogeigei`(与工作区仓不同,属正常)。⚠️ 被多会话并发写、分钟级推进 ⇒ **用前先 `git log -1` 校准**。
- 🔴 **取证通道=「只连不起」**:本机 **9223 常驻一个独立浏览器实例**,动手前 `netstat -ano | grep ":9223"` 探;在跑就直连,⛔ 不另起。规则在 `skills/browser-harness/SKILL.md`「本机(用户明令)」段。🔴 **一个页面只开一个标签**(用户令)。
- ⚠️ **本机裸 `bash` 会落到 WSL**(路径被吃)⇒ 一律用 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`。
- 🔴 **本工作区现名 `contentm_agent`**(2026-10-08 定,旧名 `content_marketing_agent`,再早是 `agent-product`)。机制登记**已全部改成现名**:`collabd.config.json` 的 `workspace` + `collabctl.py` 的 `WORKSPACES`/`KEEPALIVE_TASKS`(**源 + 3 个区副本共 4 份,改一处要改 4 份**)+ ai1net 的 `peer_workspaces`。旧空壳目录改名 `content_marketing_agent.RETIRED-20261008` 保留(零删除)。⚠️ ai1net 改了 peer ⇒ **看板要重启**才生效(配置模块级只读一次)。
- 🔴 **本区协作机制当前是「停」态**(2026-10-08 用户令):开关 off、旧保活任务已注销(定义备份在 `tmp/_oldtask_backup.xml`)⇒ 目标完成后不再每 5 分钟空转。要再起 ⇒ `collabctl.py on --ws E:/ProgramData/AIProject/contentm_agent`。
- ⚠️ **`collabctl.py` 的 `off --ws` 曾越区**(`kill_all()` 全机扫描不认 `--ws`,一次杀掉他区+看板共 5 个进程)⇒ 2026-10-08 已修:`ONLY_WS` 时只杀本区心跳 pid 并提前 return,4 份同步。⛔ 改这文件记住**源 + 3 区副本**都要改。
## 二、产品规划四段流水线(slug `mcn-shortvideo-agent`)
## 机制侧(本工作区)
- **四段次序不可跳**:①产品需求(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)→ ②产品功能 → ③界面交互 → ④原型说明文档。①段落 `docs/pm/mcn-shortvideo-agent/research/`(1a 是**汇总型**,不是 grill 产出);1b 在 `content-workbench` 项目下(跨项目引用,⛔ 不重写)。
- **执行期产物落点**:一律落 `执行会话/目标-<标题前缀>-<sha1(title)[:6]>/`;正式归档 `docs/pm/…/{research,prd}/` 由主会话收口后统一搬。
- 🔴 **换目标三件套**:带 `--kpi`(不带 ⇒ 旧验收判据原样留下 ⇒ 新目标一声明就判「全过」)+ 换 `tmp/supervise-inbox/NEXT.md`(执行会话开工队列)+ `--switch-goal`(并同步 `collabd.py --set-life`)。派活排期名 `[执行]-[<goal.topics>]-<具体>`。
- 🔴 **本区当前目标**(2026-10-08 23:29 切)=「梳理板块与操作路线,经 GPT 规划后重做②段文档并重生成界面」,类别 `产品规划`。**四步**:①现状梳理 ✅(`产品规划/现状梳理-板块·功能·操作路线.md`,域目录 `产品规划/` 由此建立)|②GPT 规划意见 ✅(`执行会话/目标-…-071c5b/GPT-规划意见与采纳决策.md`)|③重做②段两份 ✅(同目标目录 `2a-产品功能-新版.md`+`2b-界面布局-新版.md`)|④重生成界面 **产物已在盘**(`ui/mcn-workbench.html` **V2** 1 661 行/133 459 B + `ui/DESIGN.md`;00:53 刚写完就遇 daemon 重启被终止,⛔ 非半成品、⛔ 不是变小=被截断)⇒ 只欠**闸门取证 + 上报**;孤儿锁已于 2026-10-09 06:2x 释放,已重派第二棒(排期 `58855437`,once 06:32)。
- 全局技能根 `E:/ProgramData/.workbuddy/skills/`;本工作区技能目录 `.workbuddy/skills/` 目前只有 `aigc-idea-impression`。
- 本机裸 `bash` 会落到 WSL(路径被吃)⇒ 一律用显式路径 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`。
- 派活排期名 `[执行]-[<goal.topics>]-<具体>`;**本区当前目标**(2026-10-08 23:29 切)=「梳理板块与操作路线,经 GPT 规划后重做②段文档并重生成界面」,类别 `产品规划`(旧目标「生成产品界面」已归档)。🔴 **换目标必须带 `--kpi`** —— 不带 ⇒ 旧验收判据**原样留下** ⇒ 新目标一声明就被判「全过」、机制不派活(本次已踩到并当场补掉)。🔴 **换目标还要换 `tmp/supervise-inbox/NEXT.md`** —— 那是执行会话据以开工的队列,不换 ⇒ 新派出的会话会去做旧目标的活(旧队列已归档为 `NEXT-旧目标-重写竞品分析-归档20261008.md`)。
## 三、②段两份的现行口径(2026-10-09 新版)
- 🔴 **取证通道=「只连不起」**(2026-10-08 用户令「为什么要重新开浏览器,先检查之前是否开过浏览能否复用」):本机 **9223 上常驻一个独立浏览器实例**,动手前先 `netstat -ano | grep ":9223"` 探;在跑就直接连,⛔ 不另起。规则已写进 `skills/browser-harness/SKILL.md` 的「🔴 本机(用户明令)」段。`_tools/cap.py` 已照此改造:走 CDP `Emulation.setDeviceMetricsOverride` 定视口(**声明式,不再是 `--window-size` +偏移量**),只连 9223;顺带解除 500px 宽度下限,**390×844 现已可测**。⛔ 别新建自己起 Chrome 的脚本(本轮建过 `_tools/measure.py`,写完即删)。
- 🔴 **③段功能入口卡(`.data-card`)=三段纵向**(2026-10-08 第七轮定,照参照物 `mcn-work-shop` 首页逐值量):图标 22px **独占一行** → 标题 `--fs-18/600`(行高写死 1.35)→ 描述 `--fs-14`(行高写死 1.35);`gap:6px`(`--mg-6`)、`padding:16px`、`--sh-L1` 阴影;网格 `minmax(200px,1fr)`。**实测卡高 111.19px**(参照物同宽 113px)。⛔ 三个刻意不学:圆角 12px、`translateY(-2px)` 位移、一个功能一个色。`.sect-nav` **没有小标**(参照物也没有)。
- 🔴 **密度表的读法**(2026-10-08 更正):P1 账号矩阵的绿/红分界是「**≥820 绿**;**768 / 700 红**;**640 绿**(手机外壳);**560 / 500 红**」。⚠️ 旧文档曾把 768 记成 7 行 ✅ —— **那是错的**,真值 5 行 ❌;错因是旧通道 `--window-size` 的视口歧义(768 恰好卡在卡片「3 列/2 列」阈值 632px 上,只差 7px)。
- 🔴 **改一个组件的高度之前,先跑「改前基线」**:把改动回退成一份副本(如 `_scratch/base.html`),同一套判据跑满逐视口表 ⇒ 才能分清哪条红是自己造成的。⚠️「改完只量主视口」这个毛病已犯两次(第六轮 640、本轮 1440),两次都是逐视口表兜住的。
- 🔴 **浏览器:一个页面只开一个标签**(2026-10-08 用户令「后续调试网页 一个页面开一个标签就行了不要反复开」)。定义处=`E://ProgramData//.workbuddy//skills//browser-harness//SKILL.md`「🔴 本机(用户明令)」段(⛔ 不复述细则,只引一处)。⚠️ 起因:本会话调试原型时反复 `new_tab` 且忘了关,共享实例里堆出同一个页面的一串标签,用户亲眼看到。
- 🔴 **③段侧栏=64px 药丸浮栏(不是「纯图标栏」)**(2026-10-08 第七轮回源站实测更正)。真值:栏 64px/内衬 3px/圆角 100px/淡底+1px 淡描边的**药丸浮栏**(⛔ 无右边线);项 **56×78 药丸**(圆角 54/内衬 16/段间距 6),**图标 24 在上、2 字短名 12px/500 在下,两者都常驻**;当前项=中性填充 `ink 6%` + 满墨(⛔ 不用品牌紫底);非当前项 `--ink-faint`;项间无 gap;hover 只换色。**名字一律 2 字**(内容宽 56−32=24px);悬停提示的内容是**该页说明**、⛔ 不是名字。⛔ 三处不学:填充字形图标(我方用 mcn-work-shop 那套描边图标)/真浮层(仍占一列)/逐项对齐的 162px 说明列(我方是单条浮层)。⚠️ 改前那版「纯图标栏、名字只走提示」是**照 `library.json` 的计数猜的** —— 包里既没有导航几何、`design-system.html` 里 `app-sidebar` 也是 0 处。**教训:计数不是几何,包里没有的事实就回源站量。**
- 🔴 **③段密度分界(2026-10-08 第八轮 · A 方案后)**:P1 账号矩阵绿 = 1440/1280/1024/1000/960/920/901/900/840/820/**768**/**700**/**640**/**560**;红 = **只剩 500×844**。做法:`≤1000` 功能入口卡最小宽 `200→160`、`≤820` 统计条最小宽 `132→96`(`auto-fit` 只在真装不下时才缩 ⇒ 宽屏 10 个视口一格未动)+ 移动档标签条藏掉 16px 横向滚动轨。⚠️ 这两档阈值已写进 `DESIGN.md` §1.1 ⑨ 断点表(原表 `901–1024` 与 `901–1000` **区间重叠**,已校正成六档不重叠)。
- 🔴 **③段导航规则已改(2026-10-08 第八轮)**:`layouts-tooling.md` **§5.5.2 判据订正** —— 从「栏宽必须 240–280px」改成「**每一项的名字必须常驻可读**(字号 ≥12px 不截断;64px 栏的名字上限 2 个汉字)」,判的是实质不是手段;**新增 §4.9「导航栏」一档**(两套合规形态:64px 药丸栏 / 240–280px 宽栏;含当前项只改颜色、窄屏整段换形态、⛔ 横滚条不许画滚动轨、图标一处出口、⛔ 不许照组件清单计数反推形态)。⇒ 我们现在的「64px 药丸浮栏 + 2 字常驻短名」**从"判据判不过"变成"合规"**。
- 🔴 **③段两条元规则(2026-10-08 第八轮新增,`layouts-tooling.md` §5.6)**:① 参照物原值与我方令牌刻度冲突时**必须**走三步(量到数值 → 差异列表 → 逐条「学/不学+理由+代价」),⛔ 不许默默"就近落位",「刻意不学」⛔ 不得用于掩盖规则违反;② **自造物料(参照物笔记、临时对照表)⛔ 不得作为判据来源** —— 证据栏只许写「技能原文的文件:小节」「源站/源文件实测读数」「用户原话」。
- 🔴 **③段 Gate-3 新增强制两条(2026-10-08 第八轮)**:① **「看过」必须有落盘记录**(`oil-ui-pro` 10 分制评分写进 3d),⛔ 不许用「自检 N 项全绿」顶替;② **人工项必须给机检实现,否则写死「本条无机检」,🔴 ⛔ 不许在没有取值手段的条目上打 ✅**。⚠️ 起因:`3d` §九 曾把「§5.5 五条逐条过完」记成 `✅ 自检机核`,而那五条当时**零覆盖**。
- ⚠️ **全局技能包 `check_naming.py` 曾带 3 条既有 FAIL(2026-10-08 第八轮修)**:①「停线规则」的 AUTHORITY `authority` 写成 `None`(=连权威处也不许写,与本条 `why` 自相矛盾;且 `SKILL.md` 里根本没有这条规则)⇒ 已改 `SKILL.md` 并把规则补进「执行规则」;②③ `stage-proto-doc` 与 `usage-scenario` 两处仍写①段已废的 `strategy/` 路径 ⇒ 已改 `research/1d-产品策略.md` / `research/1e-使用场景.md`。复跑:**通过 2060 / 失败 0 / 提示 27**。⛔ 改全局技能包前后都要跑这个闸门。
- 改动主线=按「**业务对象 + 数据流转**」解耦(原来「页面=功能=数据」三层揉在一起)。八页**不推倒**,改的是归属判据。
- **归属判据**=这个功能主要**创建/改变哪个核心业务对象**(⛔ 不是「哪页有按钮」)。新增 11 个对象的字典;F7/F8 收归 **P4**、F14 从 P2 改 **P4**;F11 标「待验证/非主链」、F12 标 `P2/Deferred`。
- **2b 结构改动**:新增「**页面公共框架(Page Shell)**」层(不计板块数/不参与功能归属/不占冻结计数);③段自己长出来的那层「功能入口」**撤销**;导航回**三组+跨组**(找选题/走创作流水线/看矩阵复盘 + 跨组账号画像);流转改成**六要素契约**(来源/触发/传递对象/对象ID/接收方式/落地状态)共 **20 条**(18 条原有 + 2 条新增、标「待确认」);**骨架冻结升级为「对象冻结」**(新增业务能力必须先进 2a 功能清单并完成对象归属)。业务板块 **39 块**。
- 🔴 **第③棒的三类待确认**(已单列进两份文末):②段要不要并成一份九节架构基线|T1–T6 六型要不要进正文|两条新增流转(P7→P1、P7→P2)。另 GPT 建议的组名改名**未采纳**(组名沿用②段现成三个)。
- ⚠️ 一处计数订正:①棒 §四 A1 写「八页共 38 个板块」,其自给的加总 `5+5+4+6+5+4+6+4` 实为 **39** ⇒ 本版重数为 39,38 是加总差错。
- ②段两条老硬约束:功能**按使用场景组织**(不按页面,2026-10-06 定案)|全段**零视觉词**(配色/字体/间距/组件样式/动效)。
## 四、技能包闸门与改包纪律(`product-planning`)
- ⚠️ 闸门必须带 `--ws`:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 **通过 2060|失败 0|提示 27**;⛔ 别给 `--root .`(会把工作区当技能包查)。**改包前后都要跑**。
- 🔴 **「单一可信源」门禁**:`AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外复述即 FAIL(现 9 条)。**改这些事实只改权威处,然后跑闸门**;⛔ 写「不复述」时别把名单抄进来(自己踩过)。
- ⚠️ **改门禁后必须做变异对照**(注一条假病进去确认报红,再还原)。教训:曾因 stale 变量(该用 `tt` 用了 `old`)导致「旧名提示」**恒不触发**(假绿)。
- 🔴🔴 **改包纪律**(技能仓根 `改包纪律.md`):⛔ **不许整文件覆盖**|落地前**比对时点**|改完**必跑闸门**|收到覆盖性提交先做**结构体检**。
- 🔴 **事故留痕**:提交 `1d7d31a` 用「整文件覆盖」一步造出 12 条 FAIL(权威声明 5 处→1 处、供给口径被翻成「open-design=默认主线」)⇒ 2026-10-08 已整包回退到 `44d42b0`(技能仓提交 `8fc9a92`),闸门回 `2060|0|27`;那批「说人话」改写另存 `归档/技能包-说人话改写-被覆盖存档-20261008/`(只取措辞、⛔ 不取结构)。⛔ 修法顺序:**先恢复权威处声明,再清复述**,反了会反复。
- 🔴 **说人话的处置**(2026-10-08 用户选 C):两个技能**不整合进 product-planning**,按技能名引用 —— 模式清单取 `humanizer`|**评分与门槛取 `humanizer-zh` 五维表(≥45/50)**|冲突以 `humanizer-zh` 为准|⛔ 取不到来源时明写「无判据来源,本项未判」。落盘文字一律过说人话并在文末写评分。
## 五、③段设计供给(单一可信源)
- 供给关系**只在** `references/stage-delivery/SKILL.md` 的 `## 供给` 块定义(6 行表);③段其余章节与 runbook/layouts-tooling/总入口提到供给一律引 `§供给·<行名>`,⛔ 不许复述。**改供给只改那一块**,改完跑闸门。
- **默认主线=`oil-ui-pro`**(方法+独立评审);定调与令牌取③段自带 `assets/design-systems/`(当前 `design-system-tiaoyue`);**`open-design`=可选件**(本地裁剪 Apache-2.0,⛔ 不许改其内容;缺 LICENSE 全文与上游 NOTICE)。无 open-design 时 `craft/` 那 13 份工艺数值判据**无供给来源** ⇒ 明说,⛔ 不编。
- ③段细目(导航判据 `§5.5.2`、`§4.9` 导航栏、`§5.6` 两条元规则、Gate-3 两条新增)⇒ 读技能包 `layouts-tooling.md` 与 `execution-runbook.md`,**本文件不复制**。
## 六、③段原型 `ui/mcn-workbench.html`(第八轮后)
- 🔴 **细则不在此复制**:口径与断点表在项目内 `ui/DESIGN.md`,全量实测值在 `ui/3d-审查报告.md`。本文件只留最容易踩的三条:
1. **外壳高度链三件套**:`html,body` + `.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}` —— 少写一处 ⇒ 整页「滚不动」而不是「不滚」。**判滚动四个容器都要核**(`window`/`html`/`body`/`.view`,只核 `window.scrollY` = 假绿)。
2. **改原型两条硬坑**:JS 模板字符串里的 HTML 注释**不许出现反引号**(会提前闭合模板字面量 ⇒ 页面静默白屏,而 `node --check` **报不出来**;已踩 4 次);HTML 注释**必须写 `-->`**(写成 `*/` 会吞掉后面整段)。改完先 `node --check` 再跑自检。
3. **几何一改,逐视口密度表整表重跑**,且改前先落「改前基线」—— 这个毛病犯过两次。
- **顶栏只放两项**(左标题 + 右「随手记」),⛔ 不许再加。**左栏=一层八项**、短名**两字**、形态=64px 药丸浮栏。⚠️ **形态一改,自检选择器与变异注入点必须跟着改**,否则判据静默失效变恒绿(假绿已踩 4 次)。
- ⚠️ 教训:改前那版「纯图标栏、名字只走提示」是**照 `library.json` 的计数猜的** —— **计数不是几何,包里没有的事实就回源站量**。
- **遗留未清**:`3d` B-15(500×844 一屏 −1 行)留档待裁定;「满宽表格与一屏 ≥6 行不可兼得」已登记未动。
## 七、本区会话机制
- 🔴 **开关 `off`,但常驻仍在跑**(开关只挡「自动续命」,⛔ 别把 off 读成「没在跑」)。2026-10-08 23:4x 实测:常驻 ✅ 活 pid 40016/心跳 2 秒前 | 看板在听 20099 | 保活任务 `collabd-keepalive-contentm_agent` = Ready。要真起/真停 ⇒ `collabctl.py on|off --ws E:/ProgramData/AIProject/contentm_agent`。
- 🔴 机制登记**已全改现名** `contentm_agent`:`collabd.config.json` + `collabctl.py` 的 `WORKSPACES`/`KEEPALIVE_TASKS`(**源 + 3 个区副本共 4 份**)+ ai1net 的 `peer_workspaces`(改完**看板要重启**)。旧空壳目录 `content_marketing_agent.RETIRED-20261008` 保留(零删除)。⚠️ `collabctl.py off --ws` 曾越区(`kill_all()` 全机扫描杀到他区+看板),已修;⛔ 改这文件记住源+3 副本。
- **域锁**:域目录=**工作区下的第一层目录**;⛔ 别在域目录外套公共父目录(所有子目录会算成同一个域键 ⇒ 域锁失效)。抢锁 `handoff-guard.sh --claim-exec "<会话名>" --domains "<域目录>"`(包在 `skills/session-mechanism/scripts/lock/`);抢不到 ⇒ **停手报告**。释放 `--release-exec "<会话名>"`(或 `ME=<名>`;⛔ 取不到名 fail-closed,不静默清空)。🔴 **孤儿锁怎么来的(2026-10-09 查实)**:锁是**磁盘持久物**(`.locks/<域目录转义>/OWNER`),脚本 `trap _cleanup_guard EXIT INT TERM HUP` **只清临时文件与 `.gate`、不碰域锁** ⇒ 会话被强杀就没人释放(实测成因:宿主 **daemon 冷启动重启** 把 `a257d30f` 标 terminated —— 不是超时、不是用户点的);而域冲突判定**只比会话名、不判死活**,R9 又禁 AI 删锁 ⇒ 只能用户处置。**同型第二例**:`ai1net-dsh-anywhere ← [协作]N9复测-2248`(09-29 建)已挂 10 天。
- ⚠️ **本目标(`…-071c5b`)产物落点分岔**:目标目录合同判「不在目标目录内」,而域门禁要求「只许写域目录」。①棒取域目录 `产品规划/`(收到软提醒,非拒收);②③棒改取**域目录 `执行会话`**(第一层目录 ⇒ 能盖住目标目录)+ 产物落目标目录 —— 两种都记在案,口径待用户裁定。
- ⚠️ `--report <sid> --state done --artifact "<路径>"`:产物**读不到**⇒硬拒收;**落点不在目标目录**只给软提醒(不拒收)。**sid 取法**:查宿主库 `E:/ProgramData/.workbuddy/workbuddy.db` 的 `sessions` 表(按 `cwd` + `created_at desc`,本区会话 `is_background_automation=1`)。