Files
contentm_agent/.workbuddy/memory/MEMORY-压前全量-20261009.md
T

78 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# content_marketing_agent · 项目长期记忆
> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。
> 整理纪律:**同一件事只在一处写全**,别处只引;新条目先进当日日志,跨会话有用才上提到这里。
## 一、仓库与位置
- 🔴 **工作区仓**(`E:/ProgramData/AIProject/contentm_agent`):远端 `[email protected]:admin/contentm_agent.git`(Gitea,SSH deploy key **有写权限**),分支 `main`;提交 `df56c2c`(首,1773 文件 / 205 MiB)+ `eee042c`(10-08 22:xx,③段第八轮收口)。提交者身份是**局部**配置 `WorkBuddy <[email protected]>`(全局 git config 未动,可推翻)。`.gitignore` 排运行时噪音(collab 日志/脚本 `.bak*`/`supervise.pid`/`.workbuddy/tmp/`/`tmp/_*.txt`/`**/ui/_scratch/`/`__pycache__/`/`tmp/_bh_shots/`·`_figma_preview/`·`_gpt_dl/`/`.workbuddy/.load-pending`);**参考资料 231M 抽帧素材全量入库**(⛔ 不打折)。
- 🔴 **全局技能仓**(`E:/ProgramData/.workbuddy/skills`)是**独立仓**:远端 `…/admin/workbuddy_skills.git`,分支 `master`(⛔ **无 upstream** ⇒ 必须 `git push origin master` 显式推,`git status -sb` **不显示 ahead**,别拿它判断同步),提交者身份是**全局** `maogeigei <[email protected]>`(与工作区仓的局部身份不同,属正常,⛔ 别"统一")。⚠️ **该仓被多会话并发写、推进以分钟计** ⇒ **任何结论都带时效,用前先 `git log -1` 校准**。此前 9 个"未纳管"目录(AI HOT/draw-ui/dsh-* ×6/oil-motion/skills-security-check)已于 `e03465c` 入库。
- 🔴 **取证通道=「只连不起」**:本机 **9223 上常驻一个独立浏览器实例**,动手前 `netstat -ano | grep ":9223"` 探;在跑就直接连,⛔ 不另起。规则在 `skills/browser-harness/SKILL.md`「🔴 本机(用户明令)」段;`_tools/cap.py` 已走 CDP `Emulation.setDeviceMetricsOverride` 定视口(声明式,390×844 可测)。🔴 **一个页面只开一个标签**(用户令),定义处同上(⛔ 不复述细则)。
- ⚠️ **本机**:裸 `bash` 会落到 WSL(路径被吃)⇒ 一律用 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`。
- 全局技能根 `E:/ProgramData/.workbuddy/skills/`;本工作区 `.workbuddy/skills/` 只有 `aigc-idea-impression`。
## 二、产品规划四段流水线(MCN 项目 slug `mcn-shortvideo-agent`)
- **四段次序不可跳**:①产品需求(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)→ ②产品功能 → ③界面交互 → ④原型说明文档。用户 2026-10-08 定:「应该要先完成 1 2步 在进行第3步」。
- ①段 1a 落 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`(**汇总型**,不是 grill 产出);1b 在 `content-workbench` 项目下(跨项目引用,⛔ 不重写)。
- **产物落点**:执行期间一律落 `执行会话/目标-<标题前缀>-<sha1(title)[:6]>/`(域门禁+文档合同要求);正式归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 由主会话收口后统一搬。
- 🔴 **本区当前目标**(`tmp/supervise-inbox/goal.json`,2026-10-08 23:29 切)=「梳理板块与操作路线,经 GPT 规划后重做②段文档并重生成界面」,类别 `产品规划`。旧目标「根据 1a 需求文档生成 MCN…产品界面」已归档进 `goals/`。
- 🔴 **换目标必须带 `--kpi`** —— 不带 ⇒ 旧验收判据原样留下 ⇒ 新目标一声明就被判「全过」、机制不派活(已踩)。
- 🔴 **换目标还要换 `tmp/supervise-inbox/NEXT.md`** —— 那是执行会话的开工队列,不换 ⇒ 新派出的会话去做旧目标的活。
- 派活排期名 `[执行]-[<goal.topics>]-<具体>`。
- 四步目标(现行队列 `NEXT.md`):①梳理现有板块/功能划分/操作路线 → ②问 GPT 如何规划最合理 → ③重做②段两份(产品功能/界面布局)→ ④重生成界面。⛔ 按序、不跳步、不给改法抢跑。
- ✅ 第①棒已完成(2026-10-08 23:4x):产物 `产品规划/现状梳理-板块·功能·操作路线.md`(**域目录 `产品规划/` 由此建立**)。该稿口径:只摆现状与问题点(A ③段新增层/B 跨页不落地/C 流转归属/D ②③口径不一致/E 已登记未清),⛔ 不给改法。
## 三、③段设计供给(**单一可信源**)
- 🔴 **供给关系只在 `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 处。
- 🔴 **默认主线 = `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 文件)。三份技能文档共 17 处已翻转,并统一读法:凡出现 `open-design/...` 路径一律按段内相对路径 `assets/open-design/...` 读。
- ⚠️ `assets/open-design/` 是**第三方件**,⛔ 不许改其文件内容;署名见其 `ATTRIBUTION.md`。⚠️ 当前**缺 Apache-2.0 的 LICENSE 全文与上游 NOTICE**(2026-10-08 记账)。
- ⚠️ **真缺口**:open-design `craft/` 的 13 份工艺数值判据(反 AI 味/无障碍/表单校验/动效纪律)在**没装 open-design 的工作区无供给来源** ⇒ 明说,⛔ 不编。
- 🔴 **说人话的处置(2026-10-08 用户选 C)**:⛔ **两个技能的内容不整合进 product-planning**,保持按技能名引用(整合会造第二处定义)。分工写在总入口「执行规则」内容准则条:**模式清单取 `humanizer`**(含 `references/patterns.zh.md`,中文产出读它)|**评分与门槛取 `humanizer-zh`** 五维表(**≥45/50**)|冲突以 `humanizer-zh` 为准|⛔ **取不到来源时明写「无判据来源,本项未判」,不许凭感觉放行**。落盘文字一律过说人话并在文末写评分。
## 四、技能包闸门与改包纪律(`product-planning`)
- ⚠️ 闸门 `check_naming.py` **必须带 `--ws`**:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 **通过 2060 | 失败 0 | 提示 27**;⛔ **别给 `--root .`**(那是「技能根」,会把工作区当技能包查、满屏 FAIL)。**改全局技能包前后都要跑它**。
- 🔴 **「单一可信源」门禁**:`check_naming.py` 的 `AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外任何地方复述即 FAIL。当前 9 条:②③边界(权威=②段 §②—③ 交接口)|停线规则(全包禁写,权威=总入口 §执行规则)|可选档骨架名单(权威=`layouts-tooling.md` 开头)|说人话门槛|对比度数值|契约十二字段展开(权威=runbook §2.1)|②③定案原话|1b 定案原话|grill A/B 节火力点。**改这些事实只改权威处,然后跑闸门。** ⚠️ 写"不复述"时⛔ 别把名单抄进来(我自己踩过)。
- 🔴 `DEAD_PATHS` 检查:`strategy/`、`ux/` 这类已废目录形态若出现在正文的产出/只读/必读位置 ⇒ FAIL;含废止标记(旧/已废/已改名/曾/移进/改为…)的行豁免。
- ⚠️ **改门禁后必须做变异对照**(注一条假病进去,确认报红,再还原)。反面教训:`check_naming.py` 曾因用 stale 变量(`if old in t` 该用 `tt`)导致「旧名提示」**恒不触发**(假绿)。
- ✅ 2026-10-08 第八轮修掉 3 条既有 FAIL:①「停线规则」在 `AUTHORITY` 表里的 `authority` 写成 `None`(自相矛盾且 `SKILL.md` 里没有这条规则)⇒ 已补进「执行规则」;②③ `stage-proto-doc` 与 `usage-scenario` 仍写①段已废的 `strategy/` 路径 ⇒ 已改 `research/1d-产品策略.md` / `research/1e-使用场景.md`。
- 🔴🔴 **改包纪律(技能仓根 `改包纪律.md`,技能仓提交 `0011050`,谁来这个仓干活先读它)**:⛔ **不许整文件覆盖**|落地前**比对时点**|改完**必跑闸门**|收到覆盖性提交先做**结构体检**。+出事后的标准修法。
- 🔴🔴 **事故留痕:全局技能包曾不是最新调整版**(2026-10-08 22:5x 查明):提交 `1d7d31a` 提交信息写「按合并落地」,实际是**整文件覆盖** product-planning 下 7 个文件,新稿编写时点**早于**被覆盖文件的修改时点 ⇒ 必丢中间调整。**硬指标:「单一可信源」类声明 5 处 → 1 处**(丢的是 `stage-delivery/SKILL.md` 的 `## 供给` 整节标题+六行表、`layouts-tooling.md` 开头的名单权威声明、`stage-requirements/SKILL.md` 的②—③交接口声明),**供给口径被翻转**成「open-design = 默认主线」。✅ **2026-10-08 23:0x 已整包回退到 `44d42b0`(技能仓提交 `8fc9a92`)**,闸门回 `2060 | 0 | 27`;那批「说人话」改写另存 `归档/技能包-说人话改写-被覆盖存档-20261008/`(将来只取措辞、⛔ 不取结构改动)。
- 🔴 **闸门 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` **为空**(判据零改动,排除"判据变严翻旧账")。性质像**回退**:把权威声明整段删掉 ⇒ **权威处一弱化,复述就长回来**。⛔ 修法顺序:**先恢复权威处声明,再清复述**,反了会反复。⛔ 别默认是"自己上次的债"。
- 🔴 **并发覆盖实录与 B 方案补落**:我第八轮在 `stage-delivery/SKILL.md` 供给块的三处被另一会话那轮重写覆盖。用户选 B 方案后由其转告「另一会话已完成」,**核实现场不符**(HEAD 与 mtime 都没动、远端无新提交)⇒ 本会话 22:4x 补落(提交 `46bee95`)。⛔ 判"改动是否还在"一律 `git show HEAD:<文件> | grep`,⛔ 别看 `--stat` 行数。
- ⚠️ 全局技能包被多会话并发写:改前先看 mtime,改后必复跑 `check_naming.py`(该脚本只读、不写盘)。
- 🔴 **③段导航规则已改(第八轮)**:`layouts-tooling.md` **§5.5.2 判据订正** —— 从「栏宽必须 240–280px」改成「**每一项的名字必须常驻可读**(字号 ≥12px 不截断;64px 栏的名字上限 2 个汉字)」,判实质不判手段;**新增 §4.9「导航栏」一档**(两套合规形态:64px 药丸栏 / 240–280px 宽栏;含当前项只改颜色、窄屏整段换形态、⛔ 横滚条不许画滚动轨、图标一处出口、⛔ 不许照组件清单计数反推形态)。
- 🔴 **③段两条元规则(第八轮新增,`layouts-tooling.md` §5.6)**:① 参照物原值与我方令牌刻度冲突时**必须**走三步(量到数值 → 差异列表 → 逐条「学/不学+理由+代价」),⛔ 不许默默"就近落位",「刻意不学」⛔ 不得用于掩盖规则违反;② **自造物料(参照物笔记、临时对照表)⛔ 不得作为判据来源** —— 证据栏只许写「技能原文的文件:小节」「源站/源文件实测读数」「用户原话」。
- 🔴 **③段 Gate-3 新增强制两条(第八轮)**:① **「看过」必须有落盘记录**(`oil-ui-pro` 10 分制评分写进 3d),⛔ 不许用「自检 N 项全绿」顶替;② **人工项必须给机检实现,否则写死「本条无机检」,⛔ 不许在没有取值手段的条目上打 ✅**(起因:`3d` §九 曾把「§5.5 五条逐条过完」记成 `✅ 自检机核`,而那五条当时**零覆盖**)。
## 五、③段原型(`ui/mcn-workbench.html`)硬口径
- 🔴 **外壳高度链三件套**:只写 `html,body{height:100%;overflow:hidden}` ⇒ `.app` 跟着内容长高、`.view` 自己不滚、滚动落回 `<body>`,而 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}`。
- 🔴 **判据核滚动必须四个容器都核**:`window` / `html` / `body` / `.view`。只核 `window.scrollY` 会给**假绿**(原型自检曾在 500×844 报「一屏 7 行」,真值不到 1 行)。⇒ 连带:改门禁后**变异注入点也要重指**(M9 原注入 `window.scrollTo`,外壳修完后 window 根本滚不动 ⇒ 假变异,已改成注入 `.view.scrollTop`)。
- 🔴 **顶栏只放两项**:左「MCN 短视频整合营销工作台」+ 右「**随手记**」。⛔ 不许再加。依据:②段 `2b` §286 只把「随手记」定为全局可达(「任意页面一次点击内,F2 是 P0,不能埋在两层下」)⇒ 必须挂全局外壳,其余一律不许挂。
- ⛔ **已删六样,逐样来源**(详查在 `3d` §十):`收起侧栏`(G-11) 与**面包屑**来自**本项目参照物笔记** `ui/布局排版参考-mcn-work-shop.md`(⚠️ 那是**素材,不是规则文件**);`演示·账号`(G-07)/`演示·状态`(G-09) 是造的原型件;顶栏`全局检索`(G-10) 与②段 P1 的页内板块重复(**已改挂到 P1 页内**);`假设 2 项`改挂到「假设」徽章(G-08)。
- 🔴 两条纪律:①**别把「参照物产品的习惯」当需求搬进外壳**;②**撤销一个交互 ID 必须同时删它的 DOM**,否则判据「每个 data-act 都在清单里」报红。
- ⚠️ 连带:顶栏内衬 8px ⇒ **49px、任何宽度不折行**;页面身份靠页头 h1(不再有面包屑);六态由**路由**进入(`#/p/p4/empty`)。
- 🔴 **左侧栏=一层八个功能项**,与②段八页一一对应;**短名一律 2 个字**(总览/选题/资产/创作/发布/画像/复盘/对账)。**形态=64px 药丸浮栏**:栏 64px/内衬 3px/圆角 100px/淡底+1px 淡描边(⛔ 无右边线);项 **56×78 药丸**(圆角 54/内衬 16/段间距 6),**图标 24 在上、2 字短名 12px/500 在下,两者都常驻**;当前项=中性填充 `ink 6%` + 满墨(⛔ 不用品牌紫底);非当前项 `--ink-faint`;hover 只换色。悬停提示的内容是**该页说明**、⛔ 不是名字。⛔ 三处不学:填充字形图标/真浮层/逐项对齐的 162px 说明列。
- 自检判据:`#nav .nav-item` 恰 8 个、`#nav` 直接子元素全是 `.nav-item`(第二层 0 个)、八项逐个点过都落到自己那页。
- ⛔ 历史弯路两条:①写成「只有一层=四个大板块」;②塞八页项但带 240px 宽文字列表。⚠️ **形态一改,自检判据的选择器与变异注入点必须跟着改**(本轮 `.nav-flat`→`.nav-item`,M2/M8 重指),否则判据静默失效变恒绿 —— 假绿已踩过 4 次。
- ⚠️ 教训:改前那版「纯图标栏、名字只走提示」是**照 `library.json` 的计数猜的** —— **计数不是几何,包里没有的事实就回源站量**。
- 🔴 **左右布局**:每页都有一处两栏 `.grid-main-side`(宽比 **1.35fr : .9fr**):左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列。
- 🔴 **功能入口卡 `.data-card`=三段纵向**(照参照物 `mcn-work-shop` 首页逐值量):图标 22px **独占一行** → 标题 `--fs-18/600`(行高写死 1.35)→ 描述 `--fs-14`(行高 1.35);`gap:6px`、`padding:16px`、`--sh-L1` 阴影;网格 `minmax(200px,1fr)`。**实测卡高 111.19px**。⛔ 三个刻意不学:圆角 12px、`translateY(-2px)` 位移、一个功能一个色。`.sect-nav` **没有小标**。⚠️ 这张卡的高度会转嫁给密度契约(它紧贴「数据统计」下面)—— 当前靠三处收高(卡内衬 12/16、`≤1000px` 隐描述、`≤1024` 顶栏内衬 8px)维持边界。
- 🔴 **学参照物=量到细节,⛔ 不是「知道有这个名字」**(用户点破:「每个组件的样式 高度 ICON 都是需要学习的,比如功能入口,感觉没有学到细节」)。纪律:**学任何组件都要回源站量**(`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 体系。
- 🔴 **密度分界(第八轮 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` 只在真装不下时才缩 ⇒ 宽屏一格未动)+ 移动档藏掉 16px 横向滚动轨。⚠️ 两档阈值已写进 `DESIGN.md` §1.1 ⑨ 断点表(原表 `901–1024` 与 `901–1000` 区间重叠,已校正成六档不重叠)。**遗留未清**:`3d` B-15(500×844 一屏 −1 行)**留档待裁定**,给了 A/B/C 三条路与代价,⛔ 判据一个字没改。旧文档写的「边界 768px」是**假数**,已整表替换。
- 🔴 **改一个组件高度之前,先跑「改前基线」**(改动回退成 `_scratch/base.html`,同一套判据跑满逐视口表)⇒ 才能分清哪条红是自己造成的。⚠️ 几何一改(加图标、改内衬、改网格最小宽),**逐视口密度表必须整表重跑** —— 这个毛病犯过两次(第六轮只量 1440、本轮 640 从 5 行掉到 3 行)。
- 🔴 **第 5 个门禁 `ui/_tools/check_js.py`**:抠 `<script>` 段跑 `node --check` + **多行**扫 script 区内每个 `<!-- … -->` 块里的**反引号**(反引号常在注释续行上,⛔ 单行扫会漏;已做变异对照)。**改原型两条硬坑**:① JS 模板字符串里的 HTML 注释**不许出现反引号** —— 会提前闭合模板字面量,而 `node --check` 整份 html **报不出来**,页面静默白屏/`xxx is not defined`(**踩了 4 次**);② HTML 注释**必须写 `-->`**,写成 `*/` 会吞掉后面整段。⇒ 改完先 `node --check` 再跑自检。
- 🔴 MCN 原型「外部参考版」照搬结论:`3c-GPT参考版.md` 那版 P1 用**满宽表格顺排**,照搬后账号矩阵首行顶 724px ⇒ 一屏只 2 行(契约 ≥6),把行内第二行小字拿掉仍只 4 行 ⇒ **满宽表格与「一屏 ≥6 行」不可兼得**,要兼得得把每格压成一个短值(动②段定的次级信息档位)。已登记、未动。
## 六、本区会话机制
- 🔴 **本区机制:开关 `off`,但常驻仍在跑**(2026-10-08 23:4x 实测订正本节旧说法):`collabctl.py status` 读数=开关 off | **常驻 ✅ 活 pid 40016 · 心跳 2 秒前** | 看板在听 20099 | 保活任务 `collabd-keepalive-contentm_agent` = Ready(旧区名的 `collabd-supervise-agent-product` 等仍是 Disabled)。⇒ **⛔ 别把 off 读成「没在跑」**(开关只挡「自动续命」);有活动目标时不必另起常驻。要真起/真停 ⇒ `collabctl.py on|off --ws E:/ProgramData/AIProject/contentm_agent`。
- 🔴 机制登记**已全部改成现名** `contentm_agent`:`collabd.config.json` 的 `workspace` + `collabctl.py` 的 `WORKSPACES`/`KEEPALIVE_TASKS`(**源 + 3 个区副本共 4 份,改一处要改 4 份**)+ ai1net 的 `peer_workspaces`。旧空壳目录改名 `content_marketing_agent.RETIRED-20261008` 保留(零删除)。⚠️ ai1net 改了 peer ⇒ **看板要重启**才生效(配置模块级只读一次)。
- ⚠️ **`collabctl.py` 的 `off --ws` 曾越区**(`kill_all()` 全机扫描不认 `--ws`,一次杀掉他区+看板共 5 个进程)⇒ 已修:`ONLY_WS` 时只杀本区心跳 pid 并提前 return。⛔ 改这文件记住**源 + 3 区副本**都要改。
- 域锁:域目录=**工作区下的第一层目录**(本次建立的域目录是 `产品规划/`,域键 `contentm_agent/产品规划`);⛔ 别在域目录外套公共父目录(所有子目录会算成同一个域键 ⇒ 域锁失效)。抢锁 `handoff-guard.sh --claim-exec "<会话名>" --domains "<域目录>"`(包在 `skills/session-mechanism/scripts/lock/`);抢不到 ⇒ **停手报告**,⛔ 不许硬写。释放:`--release` → `--release-exec "<会话名>"`。
- ⚠️ **本目标(`…-071c5b`)的产物落点分岔**:目标目录合同(`collabd.artifact_dir_ok`)判「不在目标目录内」,而域门禁要求「只许写域目录」。第①棒取域目录 `产品规划/`(收到软提醒,非拒收);第②棒改取**域目录 `执行会话`**(第一层目录 ⇒ 能盖住目标目录)+ 产物落目标目录 —— 两种都记在案,口径等用户裁定。
- ⚠️ `--report <sid> --state done --artifact "<路径>"` 对**不在目标目录内**的产物会给一条**软提醒**(不是拒收)—— 域门禁要求写域目录时,这是预期行为,如实记下即可。