Files
contentm_agent/.workbuddy/memory/MEMORY.md
T

82 lines
21 KiB
Markdown
Raw Normal View History

# contentm_agent · 项目长期记忆
> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。
> 整理纪律:**同一件事只在一处写全**,别处只引;细则进当日日志,跨会话有用才上提这里。
> 🔴 本文件按 **~9 KB 目标**维护;**实测注入在 19 KB 时开始截断** ⇒ **再加内容先删等量旧内容**。压前全量备份:`MEMORY-压前-20261011-1855.md`(另存 2026-10-09 两份更老的)。
> 🔴🔴 **注入进来的副本可能落后于本文件**(2026-10-10 实测过一次,两版方向相反)⇒ **动手改机制/建计划任务/动浏览器之前,先读本文件磁盘版对时点**,把注入版当缓存看。
## 一、仓与位置
- **工作区仓** `E:/ProgramData/AIProject/contentm_agent`:远端 `[email protected]:admin/contentm_agent.git`(Gitea,deploy key **有写权限**),分支 `main`;提交者=**局部** `WorkBuddy <[email protected]>`。参考资料 231M 抽帧素材**全量入库**。
- 🔴 **全局技能仓** `E:/ProgramData/.workbuddy/skills` 是**独立仓**:远端 `…/admin/workbuddy_skills.git`,分支 `master`,⛔ **无 upstream** ⇒ 必须 `git push origin master`;提交者=**全局** `maogeigei`。⚠️ 多会话并发写 ⇒ **用前先 `git log -1` 校准**。
- ⚠️ **本机裸 `bash` 落到 WSL** ⇒ 一律用 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`。
- 🔴 **本机 curl 取 GitHub**:`raw.githubusercontent.com` 连不通(`rc=56`)⇒ 走 `api.github.com/repos/<r>/contents/<path>`(base64)+ `git/trees/<b>?recursive=1`。
- 🔴🔴 **本机取海外域名必须挂代理 `http://127.0.0.1:10800`**(系统 PAC 同端口):直连一律 `http=000`。2026-10-11 实测九条全 200 = Google Trends RSS/Reddit `/r/*/hot/.rss`(`.json` 端点 403)/YouTube 频道 RSS/HN API/Product Hunt Feed/Wikipedia Top/Google News RSS/BBC RSS/trends24。⛔ 判死:TikTok Creative Center 要授权(`40101 no permission`)、X 官方趋势计费、IG/FB/LinkedIn 站内榜无免费源、`pullpush` 429 付费墙。
- 🔴 **浏览器=「只连不起」**:本机 9223 独立 Chrome,保活=**本会话后台任务**跑 `bh_chrome_keepalive.py`(用户 2026-10-10 令「只允许这一种方式」;⛔ 不建计划任务、⛔ 不复制副本)。动手前 `netstat -ano | grep ":9223"` 探;在跑就直连。🔴 **一个页面只开一个标签**。规则见 `skills/browser-harness/SKILL.md`。
## 二、产品规划四段流水线(slug `mcn-shortvideo-agent`)
- **四段次序不可跳**:①产品需求(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)→ ②产品功能 → ③界面交互 → ④原型说明文档。①段落 `docs/pm/mcn-shortvideo-agent/research/`(1a 汇总型);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-11 用户令 · 适用所有方案)**:用户逐字「**所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)**」⇒ **任何**平台矩阵/热点源/渠道清单/投放方案,⛔ 都不许只列国内。**主会话自决的 12 平台(可推翻)**:海外 6 = TikTok/YouTube(含 Shorts)/Instagram(含 Reels)/Facebook/X/LinkedIn;国内 6 = 抖音/快手/小红书/视频号/B站/微博。⚠️ 现状缺口:`2a`/`2b` 几乎没有平台清单,选题细节文档(`8a649c`)只提国内(**海外 0**)⇒ 都按全球口径补。
- 🔴 **功能归属判据(2026-10-09 用户令)**:**同一类事情放同一个页面**。配套两条:**资产入库不限页**(资产库页=统一管理的地方,⛔ 不是唯一入库口);**选题库容纳「对选题有帮助的任何信息」**(随手记仍落选题库,⛔ 不新增「待整理」状态)。
- 🔴 **「复盘」=发布之后看结果:看数据 + 看收入**(用户 2026-10-09 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」属复盘、是同一类事,留在复盘页,⛔ 不拆页、⛔ 不加导航项(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。
- 🔴 **「账号」是两个概念(2026-10-10 用户定义)**:**内容账号**=管内容属性(定位/风格/受众/红线),平台不属于它;**平台账号**=发布的渠道三方平台账号,登录态/授权归它 ⇒「**渠道**」=**平台账号**。建模:平台账号做成**内容账号下的子项清单**(1→N,每项带平台+登录态+授权状态)。✅ 已落地(V4):`2b` P6 画像五维+平台账号块;`2a` Account 改「内容账号」、F7 按平台账号展开、F13「一版一路」。
- 🔴🔴 **方案的两态结构(2026-10-11 用户令,已写进技能)**:用户逐字「**应该有文件夹 专门归档过期文档, 当前文档 统一放在方案文件夹中**」,并令「**这个要记录到 产品规划规则中**」。
· **方案文件夹**=`docs/pm/mcn-shortvideo-agent/`(`research/`①段+`prd/`②段+`ui/`③段+`专题/`跨段+`索引-当前权威版.md` 当入口)—— 里面**全是当前权威版**。
· **归档文件夹**=同层 `归档-过期版/`,命名 `<原名>__<来源目标短哈希>.<扩展名>`。
· **执行区** `执行会话/目标-*/` = 过程留痕(台账 `artifact` 指向那里),⛔ 不作查方案处、⛔ 不搬空。
· ✅ **已落地**(20:2x):当前版 **16 份**归位、过期版 **28 份**收进归档、索引建好;规则写进 `E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md` 新增的 `### 文档的两态:当前版与过期版`(在 `### 产物落哪` 之后)。✅ 闸门现跑 **2061|0|27** 全过。
· ⚠️ 踩坑两处(我自己的):①往技能里插新段时拿原标题当锚点、new_string 里没把它带回去 ⇒ **吃掉了 `### DESIGN.md 为什么在项目目录、不在仓库根` 这个标题**,已修回(教训:用标题作锚插入内容时,锚点必须原样保留);②`research/` 只许 `1a`~`1e` 五个标准名 ⇒ 我放的 `1b-竞品分析-汇总对比体.md` 触发闸门 FAIL,改名 `1b-竞品分析.md` 后过(内容一字未动)。
- 🔴🔴 **找方案的唯一入口=`docs/pm/mcn-shortvideo-agent/索引-当前权威版.md`**。起因:用户问「很多新老方案都在文件夹中,后续根据产品方案细化界面如何找得到对应的方案」——实测**没有单一入口**:`2a-产品功能` 在 **6 个**目标目录里各有一版、`2b` **7 个**、原型 5 个,光看文件名与字节数分不出谁新;而 `docs/pm/` 下早先那次归档还停在旧版(`2b` 只 52 256 B=V4,最新 V5 是 52 643 B)。🔴 **断链根因**:机制定的是「执行期落 `执行会话/目标-*/`、主会话收口后统一搬进 `docs/pm/…/`」,但**归档只做过一次**(10-10 22:24),之后 `20a8ac`/`8a649c`/`0a758b`/`39646d` 四个目标的产物一份都没搬。⚠️ **维护时机**:每个目标收口时更新索引(现已写进技能的四步动作里)。
- 🔴 **本区当前目标**(2026-10-11 22:07 声明)=**根据热点与选题最新方案,迭代「选题板块」(即原型 P2 选题雷达)功能** —— 用户逐字「完成新目标:根据热点和选题最新方案 迭代内容整合营销平台 选题板块功能」。类别 `产品规划`;目标目录=**机制口径** `执行会话/目标-根据热点与选题最新方案迭代选题板块功能-d0ac5f/`。三条判据=原型 P2 已按最新方案迭代并落盘/`prd` 与原型骨架逐位一致/五道闸门全过(均 `未过`)。执行棒 `d426df5b` `once` **22:20**。🔴 **本轮实质=把方案落进原型**(`prd/2a` 已含 F15、`prd/2b` 已补口径,但**原型 `ui/mcn-workbench.html` 还是 10-10 的 V5、最新方案一个字没进去**)。⚠️ 除 P2 外六页交互一律不动;**12 平台矩阵仍不落**(待拍板)。
- 🔴🔴 **收口同步要「逐份过」(2026-10-11 22:0x 踩坑)**:`8a8412` 收口时同步方**只同步了 `prd/2a`/`2b` 与索引,漏了四份专题产物**(信源收窄/赛道过滤层设计/两张赛道过滤版图)⇒ 主会话发现后手工补齐,并把两张被顶替的「全球版」旧图补进 `归档-过期版/`。⇒ **教训:同步时按「本目标产出的全部权威文档」逐个过一遍,⛔ 不能只同步 `prd/` 那两份。**
- ✅ **另两条实测收获**:①信源收窄那棒**复核后改了我的口径**(我判 `Google Trends` 与 `Product Hunt` 都偏资讯,它复核后**留前者、弃后者**)⇒ 「⛔ 照抄名单就删」那条要求起了作用;②它**如实交回一处缺口**(快手、视频号没有源)并单列,⛔ 没当成"已经收窄完了"。
- 📌 **`8a8412` 收官结论(21:44,三条判据全过)**:信源 16 路**留 8 弃 8**(弃用每条写实测返回值与拿回条件)|`prd/2a` 新增 **F15 赛道过滤与未匹配档**(接 F14 后**不插号**,F1–F14 编号与优先级未动;F9 扩出「赛道表」字段组;功能清单 14→**15 条**)|两张图新增过滤段(框图 108 节点/流程 83 节点,块内写死字段名与三档阈值 `宽松55/30 · 标准70/40 · 严格85/60`,匹配度 `M` 直接喂给七维的「账号匹配度 25%」那一维,⛔ 不两处各算一套)。冻结项一个没动(页面 7/导航一层七项/板块 39/流转 20 条/对象 11 个)+ 闸门 **2061|0|27**(主会话独立复跑过)。
- 🔴🔴 **两态规则首次完整跑通(2026-10-11 21:29–21:30)**:`docs/pm/mcn-shortvideo-agent/` 的 `prd/2a`(68 924 B)与 `prd/2b`(52 992 B)被**直接更新**,两份旧版(61 683/52 643)**自动进了 `归档-过期版/`**(命名 `2a-产品功能__8a8412.md`),`索引-当前权威版.md` 同步更新(4 806 B)。⚠️ **责任归属实测=执行棒直接做也行**(它持了 `docs` 域的锁)—— 我原在派活单里写「`docs/` 一个字都不许改」,实际是**多余的**:域锁按域互斥、不是"只许写自己的域",会话可以持多个域的锁。⇒ 两种都可行:执行棒直接改(少一次搬运)/收口时主会话改;**关键是改完必须做归档 + 索引同步这两步**。
- 📌 **另两条实测收获**:①信源收窄那棒**复核后改了我的口径** —— 我判 `Google Trends` 与 `Product Hunt` 都偏资讯,它复核后**留前者、弃后者**(两者不是一个形态)⇒ 「⛔ 照抄名单就删」那条要求起了作用;②它**如实交回一处缺口**(快手持、视频号没有源)并单列在 §三,⛔ 没当成"已经收窄完了"。📌 **最近四个目标收官**:`8a649c` 征询 GPT+补细节(17:22,国内口径)|`39646d` 全球口径矩阵与热点源(19:39)|`0a758b` 梳理逻辑+出图(04:25)|`8a8412` 收窄信源+赛道过滤(21:44)。🔴 **教训(沿用)**:判据只写「有文档/有图」⇒ 执行棒交占位图 ⇒ **判据要落到「照着能做出来」的粒度**。⚠️ 遗留六条改结构项(平台热榜归属/热点事件是否独立成对象/进度 3 或 6 态/收藏热点/数据源管理落点/选题负责人与截止时间)登记在 `NEED-USER.md` 第 6 节。
- 🔴 **检查会话补齐状态文档=常规动作**:执行棒只交付产物、不写 `目标执行状态.md` ⇒ 检查会话要「现跑门禁 + 补写文档 + 回写 `--kpi`」三件一起做(`fa6e07`/`20a8ac`/`0a758b`/`39646d` 同型)。🔴 **派棒排期时间必须晚于创建时刻**。🔴 **派棒前必须自己 `automation_update list` 核一遍待执行排期**(2026-10-11 第 49 棒实测:注入通报写「没有别的待执行排期」,实际有两条 ACTIVE once ⇒ ⛔ 别信通报,信了就会重复派棒)。
- 📌 **已收口的旧目标**(细则在当日日志):`fc471a` 导航七项一层|`b49e02` 征询 GPT(🔴 D1 待裁定=GPT 主张拆「记录与对账」出复盘,与用户方向相反)|`071c5b` 四步|`fa6e07` 八条口径落②段+原型|`547748` 逆向 Easel(被换掉,其棒已收工)|`20a8ac` 侧栏 64px+刷新改 icon(10-10 完成)|`0a758b` 热点与选题逻辑+框图流程图(10-11 04:25 完成)|`8a649c` 征询 GPT+补细节+重画图(10-11 17:22 完成,⚠️ 属国内口径,已被 `39646d` 接续改造)。⚠️ `--kpi` 按**分号**切 ⇒ 依据里 ⛔ 不许写 `;`。
## 三、②段两份的现行口径(2026-10-09 新版)
- 改动主线=按「**业务对象 + 数据流转**」解耦。八页不推倒,改的是归属判据。
- **归属判据**=这个功能主要**创建/改变哪个核心业务对象**(⛔ 不是「哪页有按钮」)。🔴 **11 个对象**=Account/Benchmark/Topic/Asset/Content/ContentVersion/PublishTask/PublishRecord/Performance/Review/Campaign·Order。F7/F8 收归 P4、F14 从 P2 改 P4;F11「待验证/非主链」、F12 `P2/Deferred`。
- **2b 结构**:新增「页面公共框架(Page Shell)」层(不计板块数/不参与归属);③段自长的「功能入口」层已撤销;页面 **7 个**(P1 矩阵总览/P2 选题雷达/P3 资产库/P4 创作台/P5 发布中心/P6 账号画像/P7 复盘台),导航**一层七项**;流转=**六要素契约**共 20 条;骨架冻结升级为**对象冻结**。业务板块 **39 块**(⚠️ ①棒 §四 A1 写 38 是加总差错)。
- ②段两条老硬约束:功能**按使用场景组织**(不按页面)|全段**零视觉词**。
- 🔴 **P5 投放页现状**:5 板块=目标选择/各版本与逐版编辑/检查结果/确认发布/发布记录;主操作=确认发布。F5 硬闸管敏感信息、软闸管人设一致性(⚠️ 竞品里**没有**敏感词检测也没有事实检测)。
## 四、技能包闸门与改包纪律(`product-planning`)
- ⚠️ 闸门必须带 `--ws`:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 **通过 2060|失败 0|提示 27**;⛔ 别给 `--root .`。**改包前后都要跑**。
- 🔴 **单一可信源门禁**:`AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外复述即 FAIL。**改这些事实只改权威处,然后跑闸门**;⛔ 修法顺序=**先恢复权威处声明,再清复述**。
- ⚠️ **改门禁后必须做变异对照**(注假病确认报红,再还原)。
- 🔴🔴 **改包纪律**(技能仓根 `改包纪律.md`):⛔ **不许整文件覆盖**|落地前**比对时点**|改完**必跑闸门**|收到覆盖性提交先做**结构体检**。
- 🔴 **事故留痕**:提交 `1d7d31a` 整文件覆盖造出 12 条 FAIL ⇒ 2026-10-08 整包回退到 `44d42b0`(技能仓 `8fc9a92`);那批「说人话」改写另存 `归档/技能包-说人话改写-被覆盖存档-20261008/`(只取措辞)。
- 🔴 **说人话的处置**(2026-10-08 用户选 C):两个技能**不整合进 product-planning**,按技能名引用 —— 模式清单取 `humanizer`|**评分与门槛取 `humanizer-zh` 五维表(≥45/50)**|冲突以 `humanizer-zh` 为准|⛔ 取不到来源时明写「无判据来源,本项未判」。落盘文字一律过说人话并在文末写评分。
## 五、③段设计供给(单一可信源)
- 供给关系**只在** `references/stage-delivery/SKILL.md` 的 `## 供给` 块定义(6 行表);其余章节提到供给一律引 `§供给·<行名>`,⛔ 不许复述。**改供给只改那一块**,改完跑闸门。
- **默认主线=`oil-ui-pro`**(方法+独立评审);定调与令牌取③段自带 `assets/design-systems/`(当前 `design-system-tiaoyue`);**`open-design`=可选件**(本地裁剪 Apache-2.0,⛔ 不许改其内容)。无 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.scrollY` = 假绿)。
2. **改原型两条硬坑**:JS 模板字符串里的 HTML 注释**不许出现反引号**(⇒ 静默白屏,`node --check` 报不出;已踩 4 次);HTML 注释**必须写 `-->`**(写 `*/` 会吞掉后面整段)。
- **顶栏只放两项**(左标题 + 右「随手记」)。**左栏=一层八项**、短名两字、形态=64px 药丸浮栏。⚠️ **形态一改,自检选择器与变异注入点必须跟着改**,否则判据静默失效变恒绿(假绿已踩 4 次)。
- ⚠️ 教训:**计数不是几何**(改前那版纯图标栏是照 `library.json` 计数猜的)⇒ 包里没有的事实就回源站量。
- **遗留未清**:`3d` B-15(500×844 一屏 −1 行);「满宽表格与一屏 ≥6 行不可兼得」。
## 七、本区会话机制
- 🔴 **域锁实体不在本工作区**:`handoff-guard.sh` 的 ROOT 落到共享锁库 `D:/github/dsh_shenxian/dsh-server-docs/05-交接单/.locks/`(`DSH_DOCS_ROOT` 覆盖实测无效);目录名被转义成 `_____…-<hash>`。🔴 **释放要按 `OWNER` 里登记的 `ME` 原文**(常不带 `[执行]-[产品规划]-` 前缀 ⇒ 用全名释放会报「名下无可释放的锁」而锁还挂着)⇒ 先 `cat <锁目录>/OWNER` 抄准名字。
- **域锁规则**:域目录=**工作区下的第一层目录**;⛔ 别套公共父目录(那样所有子域算出同一个键 ⇒ 并行失效)。抢不到 ⇒ **停手报告**。🔴 **孤儿锁**:锁是磁盘持久物,会话怎么结束都不释放它 ⇒ 都成孤儿;域冲突判定**只比会话名、不判死活**。✅ 检查会话可自解除(用户 2026-10-09 逐字授权=R9 唯一例外):`session-mechanism/scripts/lock/orphan-lock.py`,判据查宿主库 `sessions.status`(`working` 不动),先 `--dry-run`。
- ⚠️ **开关 `off` ≠ 没在跑**:`collabctl.py ensure` 幂等收敛(off⇒全停),保活任务周期触发它 ⇒ off 下迟早被停。要真起/真停 ⇒ `collabctl.py on|off --ws …`。
- 🔴 **机制登记已全改现名 `contentm_agent`**:`collabd.config.json` + `collabctl.py` 的 `WORKSPACES`/`KEEPALIVE_TASKS`(**源 + 3 个区副本共 4 份**)+ ai1net 的 `peer_workspaces`(改完**看板要重启**)。旧空壳 `content_marketing_agent.RETIRED-20261008` 保留(零删除)。
- 🔴 **文档合同**:执行棒产物落 `<目标目录>/`;**sid 取法**=查宿主库 `E:/ProgramData/.workbuddy/workbuddy.db` 的 `sessions` 表(按 `cwd` + `created_at desc`)。`--report <sid> --state done --artifact "<路径>"`:产物**读不到**⇒硬拒收;落点不在目标目录只给软提醒。
- 🔴🔴 **目标目录名:新目标一律按机制口径**(回源码 `goal_dir_name()`):取 `short or title` → 去掉 `\/:*?"<>|` → **去空格** → **`[:20]`** → 后缀 `sha1(title)[:6]`。⚠️ **存量全称口径的旧目录保持原样、⛔ 不改名**(改名会断台账 `artifact` 引用)。⇒ 开新目标时先按上式算准;`goal.json.execution_doc` 是同一套口径,**必须与它一致**(切目标后若没跑 `--ensure-goal-dir`,它会仍指着上一个目录 ⇒ 检查会话会拿旧目标文档判新目标,须手工对齐)。
- ⚠️ **检查棒模板与现场的两处不符**(2026-10-11 实测):工作区根**没有 `state.py`**(模板第 1 项跑不出来,用 `goalctl.py` 默认输出顶替);**`taskgraph.json` 不存在**(模板第 3 项)⇒ 三路判定实际只跑两路,靠状态文档补齐。