落两态结构:方案文件夹收当前权威版16份+归档-过期版收28份+索引重写;规则写进 product-planning 技能(闸门2061|0|27);顺修1b白名单FAIL与自身吃标题错误

This commit is contained in:
WorkBuddy committed 2026-10-11 20:27:09 +08:00
1 parent 2c9d623380
commit 70a4522e60
53 files changed
+24161 -106

No files matched your search

+14
View File
@@ -114,6 +114,20 @@
- 📌 **索引的维护是「靠人记得」的状态** —— 「每个目标收口时更新一次」这条目前**没写进机制**(检查会话的派活模板里没有这一项)⇒ 已立成待拍板。
- 📌 顺带确认:`执行会话/` 下共 **13 个**目标目录;其中带方案类 md 的有 11 个(另有 `d85687`/`5199a6` 只剩状态文档)。
## 20:2x–20:5x · 用户定「两态结构」并令写进产品规划规则 ⇒ 整理落盘 + 改技能包
- 🔴 **用户令(逐字)**:「**应该有文件夹 专门归档过期文档, 当前文档 统一放在方案文件夹中**」;追加「**这个要记录到 产品规划规则中**」。
- ✅ **整理落地**(方案文件夹 = `docs/pm/mcn-shortvideo-agent/`):
- **当前权威版 16 份**归位:`research/`(1a 24 317 B/1b 33 401 B)|`prd/`(2a 61 683 B=V5/2b 52 643 B=V5)|`ui/`(原型 153 410 B/DESIGN 66 210 B/实测记录 32 210 B)|`专题/` 9 份(全球平台矩阵/海外热点源查证/热点与选题功能细节/全球版框图与流程图/Easel 逆向/国内口径逻辑关系/两份 GPT 建议)。
- **过期版 28 份**收进 `归档-过期版/`,命名 `<原名>__<来源目标短哈希>.<ext>`:`2a` 5 版/`2b` 6 版/原型 4 版/`DESIGN` 4 版/实测记录 4 版/`1a` 3 版/早期 prd 与 research 旧归档 3 份。
- `索引-当前权威版.md` 重写:开头写清「方案文件夹=当前、归档-过期版=过期、执行区=过程留痕」,§六 给出**收口四步**。
- ✅ **规则写进技能**:`E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md` 在 `### 产物落哪` 之后新增 `### 文档的两态:当前版与过期版`(含用户原话、两个文件夹的定义、收口四步、以及「为什么要有这条」的实测避坑依据)。
- ⚠️ **我自己踩的两坑(都当场修了)**:
- ①插段时拿 `### DESIGN.md 为什么在项目目录、不在仓库根` 当锚点,new_string 里**没把这个标题带回去** ⇒ **标题被吃掉**、其正文变成孤儿(`git diff` 里看出 `-### DESIGN.md…`)⇒ 已修回,现标题序列正确(`产物落哪` 72 → `文档的两态` 81 → `DESIGN.md 为什么…` 96)。**教训:用标题作锚插入内容时,锚点必须原样保留。**
- ②`research/` 的白名单只许 `1a`~`1e` 五个标准名 ⇒ 我放的 `1b-竞品分析-汇总对比体.md` 触发闸门 **FAIL 1** ⇒ 改名 `1b-竞品分析.md`(内容一字未动)后 **2061|0|27** 全过。
- ⚠️ **技能仓现场**:多会话并发写 —— `git status` 里另有别人未提交的 `browser-harness/SKILL.md`、`session-mechanism/SKILL.md`、`.gitignore`、video-capture 两个脚本删除等;我只 add 了自己改的 `product-planning/SKILL.md`。技能仓 ⛔ 无 upstream ⇒ 推送用 `git push origin master`。
@@ -0,0 +1,72 @@
# contentm_agent · 项目长期记忆
> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。
> 整理纪律:**同一件事只在一处写全**,别处只引;细则进当日日志,跨会话有用才上提这里。
> 🔴 本文件按 **~9 KB 目标**维护;**实测注入在 19 KB 时开始截断**(2026-10-09 只丢末尾数十字符)⇒ 本版压至 ~14 KB 留余量。**再加内容先删等量旧内容**。
> 压缩史:2026-10-09 压过两次;压前全量存 `MEMORY-压前全量-20261009.md` 与 `MEMORY-压前-20261009-2305.md`。
> 🔴🔴 **注入进来的副本可能落后于本文件**(2026-10-10 实测):注入版写「浏览器保活=**计划任务**」,而本文件(现行)写「**只许会话后台任务**、⛔ 不建计划任务」——**两版方向正好相反**,照注入版动手=做了用户明令禁止的事(已撤销)。⇒ **动手改机制/建计划任务/动浏览器之前,先读本文件磁盘版对时点**,把注入版当缓存看。
## 一、仓与位置
- **工作区仓** `E:/ProgramData/AIProject/contentm_agent`:远端 `[email protected]:admin/contentm_agent.git`(Gitea,deploy key **有写权限**),分支 `main`;提交者=**局部** `WorkBuddy <[email protected]>`(全局 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 独立 Chrome(保活=**本会话后台任务**跑 `bh_chrome_keepalive.py`)。动手前 `netstat -ano | grep ":9223"` 探;在跑就直连。🔴 **一个页面只开一个标签**。规则见 `skills/browser-harness/SKILL.md`。
- ⚠️ **本机裸 `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`。公开接口够用,⛔ 不为取数起浏览器。
## 二、产品规划四段流水线(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 用户令 · 适用所有方案)**:用户逐字「**所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)**」。⇒ **任何**平台矩阵/热点源/渠道清单/投放方案,⛔ 都不许只列国内。**主会话自决的清单(可推翻)**:海外 6 = `TikTok`/`YouTube`(含 Shorts)/`Instagram`(含 Reels)/`Facebook`/`X`/`LinkedIn`;国内 6 = `抖音`/`快手`/`小红书`/`视频号`/`B站`/`微博`;共 **12**。⚠️ **现状缺口(2026-10-11 实测)**:`2a`/`2b` **几乎没有平台清单**(`2a` 仅出现「抖音」1 次、`2b` 0 次);选题细节文档(`8a649c`)只提国内(抖音 12/知乎 8/微博 7/小红书 4/B站 4,**海外 0**)⇒ 都按全球口径补。
- 🔴 **功能归属现行判据(2026-10-09 用户令)**:**同一类事情放同一个页面**(找选题/拆解选题/做选题都属「选题相关的事」⇒ 同在选题页)。两条配套口径:**资产入库不限页**(任何页产生资产都可就地入库,**资产库页=统一管理的地方**,⛔ 不是唯一入库口;「一个对象只有一处产生」管的是**唯一权威数据**、⛔ 不是写入动作的地点);**选题库容纳「对选题有帮助的任何信息」**(随手记仍落选题库,⛔ 不新增「待整理」状态,靠分类区分)。
- 🔴 **「复盘」=发布之后看结果**:**看数据 + 看收入**(用户 2026-10-09 22:48 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」(发布记录/溯源/对账/商单与收支)**属复盘、是同一类事**,留在复盘页,⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。
- 🔴 **「账号」是两个概念,现行定义(2026-10-10 用户逐字「内容账号管的是内容属性(主要是账号设定 内容做成什么样),平台账号应该是 发布的渠道三方平台账号 用户发布具体内容」)**:**内容账号**=管**内容属性**(账号设定:定位/风格/受众/偏好红线/长期记忆),**平台不属于它**;**平台账号**=**发布的渠道**(三方平台账号,"发布具体内容"用的就是它),**登录态/授权归它**。⇒「**渠道**」=**平台账号**(⛔ 不再说"账号 × 平台")。**建模(主会话自决、可推翻)**:不加对象,平台账号做成**内容账号下的子项清单**(1 → N,每项带「平台 + 登录态 + 授权状态」)。✅ **2026-10-10 已落地(V4)**:`2b` P6 画像改**五维** + 新增「平台账号」块(框 4→5 块);`2a` `Account` 改「内容账号」+ F7 改名并改「按平台账号展开」、F13 补「一版一路」(`PublishRecord` ⛔ 不加渠道字段)。
- 🔴 **本区当前目标**(2026-10-11 18:53 声明,用户逐字「**所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)**」)=**按全球口径重做平台矩阵与海外热点源 + 重画框图与流程图**。类别 `产品规划`;目标目录=**机制口径** `执行会话/目标-按全球口径重做平台矩阵与热点源含海外主流-39646d/`。三条判据=平台矩阵含海外并落文档/海外热点源查证落文档/框图与流程图按全球口径重画(均 `未过`)。执行棒 `8d7d02b3` `once` **19:02**。⚠️ 本轮**不动** `2a`/`2b` —— 「要不要把 12 平台矩阵同步进去」待拍板 ⇒ 执行棒只出方案与建议。🔴 **教训(沿用)**:判据只写到「有文档/有图」⇒ 执行棒会按最低标准交出一张占位图 ⇒ **判据要落到「照着能做出来」的粒度**(`8a649c` 已按此复检:框图 77/流程图 41 个文本节点,块内是字段名与公式才算过)。⚠️ 遗留六条改结构项(平台热榜归属/热点事件是否独立成对象/进度 3 或 6 态/收藏热点/数据源管理落点/选题负责人与截止时间)登记在 `NEED-USER.md` 第 6 节等拍板。
- 🔴 **检查会话补齐状态文档=常规动作**:执行棒只交付产物、不写 `目标执行状态.md` ⇒ 检查会话要「现跑门禁 + 补写文档 + 回写 `--kpi`」三件一起做(`fa6e07`/`20a8ac`/`0a758b` **三次同型**)。🔴 **派棒排期时间必须晚于创建时刻**(早于 ⇒ 宿主不补跑,⛔ 不是调度器坏)。
- 📌 **已收口的旧目标**(细则在当日日志):①`fc471a` 导航改七项一层并重排归属(10-09 15:48)|②`b49e02` 征询 GPT(10-09 16:46;GPT 原文 10 562 字符逐字留痕;🔴 **D1 待裁定**=GPT 主张拆「记录与对账」出复盘,与用户方向相反)|③`071c5b` 四步(10-09 08:14)|④`fa6e07` 八条口径落②段+原型(10-09 09:34,V4)|⑤`547748` 逆向 Easel 热点雷达(10-10 22:49 被换掉,其棒 `3f59c890` **22:57:58 已收工**,报告 15 KB + 取证 12 份)|⑥`20a8ac` 侧栏 64px + 刷新改 icon(**10-10 23:41 收口=已完成**,三判据全过、依据挂现跑证据)|⑦`0a758b` 梳理热点与选题逻辑+出框图与流程图(**10-11 04:25 收口=已完成**,三判据全过;产物=逻辑关系 md + 框图/流程图 html + 两张 png,全在 `执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/`;遗留 7 处断点只登记未动手,属「补内容」不属「改结构」)|⑧`8a649c` 征询 GPT + 补细节 + 重画图(**10-11 17:22 收口=已完成**;产物=GPT 提问稿 4 492 B + 回复逐字 44 524 B + 细节文档 39 743 B + 框图 25 555 B/77 节点 + 流程图 17 152 B/41 节点,全在 `执行会话/目标-征询GPT对选题板块细节的建议并重画框图-8a649c/`;⚠️ **它是国内口径**,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 复盘台),导航**一层七项**(首页/选题/创作/投放/复盘/账号/资产);流转=**六要素契约**(来源/触发/传递对象/对象ID/接收方式/落地状态)共 **20 条**;骨架冻结升级为**对象冻结**。业务板块 **39 块**。
- ②段两条老硬约束:功能**按使用场景组织**(不按页面,2026-10-06 定案)|全段**零视觉词**。
- ⚠️ 计数订正:①棒 §四 A1 写「八页共 38 个板块」,其加总 `5+5+4+6+5+4+6+4` 实为 **39** ⇒ 38 是加总差错。
- 🔴 **P5 投放页现状(`2b` §五)**:5 板块=目标选择/各版本与逐版编辑/检查结果/确认发布/发布记录;主操作=确认发布。F5 硬闸管敏感信息、软闸管人设一致性(⚠️ 竞品里**没有**「敏感词检测」也没有「事实检测」)。
## 四、技能包闸门与改包纪律(`product-planning`)
- ⚠️ 闸门必须带 `--ws`:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 **通过 2060|失败 0|提示 27**;⛔ 别给 `--root .`。**改包前后都要跑**。
- 🔴 **单一可信源门禁**:`AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外复述即 FAIL(现 9 条)。**改这些事实只改权威处,然后跑闸门**;⛔ 写「不复述」时别把名单抄进来(自己踩过)。
- ⚠️ **改门禁后必须做变异对照**(注一条假病进去确认报红,再还原)。教训:曾因 stale 变量导致「旧名提示」**恒不触发**(假绿)。
- 🔴🔴 **改包纪律**(技能仓根 `改包纪律.md`):⛔ **不许整文件覆盖**|落地前**比对时点**|改完**必跑闸门**|收到覆盖性提交先做**结构体检**。
- 🔴 **事故留痕**:提交 `1d7d31a` 用「整文件覆盖」造出 12 条 FAIL ⇒ 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 行不可兼得」已登记未动。
## 七、本区会话机制
- 🔴 **域锁实体不在本工作区**:`handoff-guard.sh` 的 ROOT 落到**共享锁库 `D:/github/dsh_shenxian/dsh-server-docs/05-交接单/.locks/`**(`DSH_DOCS_ROOT` 覆盖**实测无效**);目录名被转义成 `_____…-<hash>`(非 ASCII 逐字变 `_`)。🔴 **释放要按 `OWNER` 里登记的 `ME` 原文**(例:登记的是 `改导航七项一层并P8并入复盘`,**不带** `[执行]-[产品规划]-` 前缀 ⇒ 用全名释放会报「名下无可释放的锁」而**锁其实还挂着**)⇒ 先 `cat <锁目录>/OWNER` 抄准名字。
- **域锁规则**:域目录=**工作区下的第一层目录**;⛔ 别套公共父目录。抢 `handoff-guard.sh --claim-exec "<会话名>" --domains "<域目录>"`(包在 `skills/session-mechanism/scripts/lock/`);抢不到 ⇒ **停手报告**。释放 `--release-exec "<会话名>"`。🔴 **孤儿锁成因**:锁是**磁盘持久物**,会话无论怎么结束**都不释放**它(被宿主终止=`terminated`;**被用户手动关=`completed`**)⇒ 都成孤儿,而域冲突判定**只比会话名、不判死活**。✅ **2026-10-09 已有自动解除工具** `session-mechanism/scripts/lock/orphan-lock.py`(用户逐字授权「可以授权 检查会话自解除孤儿锁」= **R9 唯一例外**)—— 判据查宿主库 `sessions.status`(`working` 不动|`terminated`/`error`/`archived` 可解|`completed` 过时间闸 `--idle-min` 默认 30 分钟|查不到 sid ⇒ fail-closed);先 `--dry-run`。
- ⚠️ **开关 `off` ≠ 没在跑**:`collabctl.py ensure` = 幂等收敛「on⇒补齐缺失/**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` 保留(零删除)。⚠️ 改这文件记住源+3 副本。
- 🔴 **文档合同**:执行棒产物落 `<目标目录>/`;**sid 取法**=查宿主库 `E:/ProgramData/.workbuddy/workbuddy.db` 的 `sessions` 表(按 `cwd` + `created_at desc`,本区会话 `is_background_automation=1`)。`--report <sid> --state done --artifact "<路径>"`:产物**读不到**⇒硬拒收;**落点不在目标目录**只给**软提醒**(不拒收)。
- 🔴🔴 **目标目录名:新目标一律按机制口径**(2026-10-10 定,消掉原来的「两种口径」分岔)。规则(回源码 `goal_dir_name()` 坐实)=取 `short or title` → 去掉 `\/:*?"<>|` → **去空格** → **`[:20]`**,后缀 `sha1(title)[:6]`。例:`侧栏改回64px基准形态并刷新按钮改icon`(22 字)⇒ **尾部被截成 `改ic`** ⇒ 目录=`执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/`。⚠️ **存量那个全称口径的旧目录保持原样、⛔ 不改名**(改名会断台账 `artifact` 引用,如 `…upload项目,用于投放页与发布对象的判断-0ec0a7`)。⇒ 开新目标时**先按上式算准目录名** —— `goal.json.execution_doc` 是同一套口径算出来的,**必须与它一致**(切目标后若没跑过 `--ensure-goal-dir`,它会仍指着上一个目录 ⇒ 检查会话就会拿旧目标的状态文档判新目标,须手工对齐)。
- 🔴 **浏览器保活=会话后台任务**(用户 2026-10-10 令「只允许这一种方式」):在要用浏览器的那个会话里,用**后台任务**跑 `bh_chrome_keepalive.py`,stdout 全重定向到文件(完整命令段见 `skills/browser-harness/SKILL.md` §1)。会话结束浏览器随之下线;手关窗(rc=0)⇒ 守卫停手、关了不再弹;崩溃(rc≠0)⇒ 自动拉回。⛔ 不建 Windows 计划任务(本机已撤 `bh-chrome-keepalive`)、⛔ 不复制副本到工作区。验证=`netstat` 见 LISTENING + `curl --noproxy '*' http://127.0.0.1:9223/json/version` 回 JSON。
+7 -1
View File
@@ -23,7 +23,13 @@
- 🔴 **功能归属判据(2026-10-09 用户令)**:**同一类事情放同一个页面**。配套两条:**资产入库不限页**(资产库页=统一管理的地方,⛔ 不是唯一入库口);**选题库容纳「对选题有帮助的任何信息」**(随手记仍落选题库,⛔ 不新增「待整理」状态)。
- 🔴 **「复盘」=发布之后看结果:看数据 + 看收入**(用户 2026-10-09 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」属复盘、是同一类事,留在复盘页,⛔ 不拆页、⛔ 不加导航项(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。
- 🔴 **「账号」是两个概念(2026-10-10 用户定义)**:**内容账号**=管内容属性(定位/风格/受众/红线),平台不属于它;**平台账号**=发布的渠道三方平台账号,登录态/授权归它 ⇒「**渠道**」=**平台账号**。建模:平台账号做成**内容账号下的子项清单**(1→N,每项带平台+登录态+授权状态)。✅ 已落地(V4):`2b` P6 画像五维+平台账号块;`2a` Account 改「内容账号」、F7 按平台账号展开、F13「一版一路」。
- 🔴🔴 **找方案的唯一入口=`docs/pm/mcn-shortvideo-agent/索引-当前权威版.md`**(2026-10-11 主会话手建)。起因:用户问「很多新老方案都在文件夹中,后续根据方案细化产品界面如何找得到对应的方案」——实测**没有单一入口**:`2a-产品功能-新版.md` 有 **4 份**(`20a8ac` 61 683 B/`fa6e07` 61 683 B 同尺寸副本/`fc471a` 43 328 B/`071c5b` 40 917 B)、`2b` 也有 **4 份**;而 `docs/pm/mcn-shortvideo-agent/prd/` 里 10-10 22:24 归档的那两份**是旧版**(`2b` 只 52 256 B=V4,最新 V5 是 52 643 B)⇒ ⛔ 别把 `docs/` 当权威区。🔴 **断链根因**:机制定的是「执行期落 `执行会话/目标-*/`、主会话收口后统一搬进 `docs/pm/…/`」,但**归档只做过一次**(10-10 22:24),之后 `20a8ac`/`8a649c`/`0a758b`/`39646d` 四个目标的产物全没搬 ⇒ 归档区落后、执行区堆积;`research/` 与 `交付物/` 都是空的。⚠️ **维护时机**:每个目标收口时更新索引一次(⛔ 目前靠人记得,尚未写进机制)。
- 🔴🔴 **方案的两态结构(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` 四个目标的产物一份都没搬。⚠️ **维护时机**:每个目标收口时更新索引(现已写进技能的四步动作里)。
- 🔴 **本区当前目标=无**(`39646d` 已于 2026-10-11 19:39 收口=已完成)。最近两个目标的收官(供追溯):`8a649c` 征询 GPT+补细节+重画图(17:22 完成,**国内口径**)|`39646d` 按全球口径重做平台矩阵与海外热点源(19:39 完成:三判据全过 —— 平台矩阵 9 229 B/海外热点源 13 986 B **实跑验通 9 条 + 没拿到 6 条如实登记**/全球版框图 35 223 B 与流程图 22 198 B)。⚠️ **下一目标开工前的待拍板**:要不要把 12 平台矩阵同步进 `2a`/`2b` 与原型(`39646d` 本轮只出方案与建议、⛔ 没动产品)。🔴 **教训(沿用)**:判据只写「有文档/有图」⇒ 执行棒交占位图 ⇒ **判据要落到「照着能做出来」的粒度**。⚠️ 遗留六条改结构项(平台热榜归属/热点事件是否独立成对象/进度 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` 按**分号**切 ⇒ 依据里 ⛔ 不许写 `;`。
@@ -0,0 +1,9 @@
# 自动化记忆 · [检查]-[目标检查]-contentm_agent(第 49 棒及以后)
## 2026-10-11 18:55 · 第 49 棒
- 目标「按全球口径重做平台矩阵与热点源含海外主流」(`39646d`) 判定=**没做完**(三条验收判据全未过,状态文档是空模板,台账零条目)。
- **未派新棒**:发现已有执行棒 `8d7d02b3`(once,19:02,ACTIVE)在排队 ⇒ 再派会重复执行。
- 动作:补写该目标目录下的 `目标执行状态.md`(判据表+结论+给下一棒的执行口径);用 `goalctl.py declare --kpi … --yes` 把三条判据值从非规范的「未过」改写为 `🔴 不过|…`,已回读确认;`lifecycle` 保持「进行中」。
- 教训(下次直接照做):派棒前**必须自己跑 `automation_update list` 核待执行排期**,⛔ 别信注入通报里的「没有别的待执行排期」。
- 现场两处与模板不符:工作区根无 `state.py`;`taskgraph.json` 不存在。
@@ -0,0 +1,31 @@
# 自动化记忆 · `[执行]-[产品规划]-梳理热点与选题逻辑并出框图流程图`(id `2d15c315`)
> 这是**执行棒**的自动化。每次触发=跑一轮「按 Easel 分析梳理热点与选题板块的逻辑关系 + 出产品框图与功能流程图」。
> 本文件只记**跨轮有用的高层经验**,⛔ 不放全文产物、⛔ 不放交付正文。
## 轮次台账
| 轮 | 时间 | 结论 | 产物落点 |
|---|---|---|---|
| 1 | 2026-10-11 04:09 | ✅ 三样产出全部落盘,`--report done`,域锁已释放 | `执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/` |
## 本轮要点(第 1 轮 · 04:09,会话 `3cadf11b`)
- **产物三件**:`逻辑关系-热点与选题-2026-10-11.md`(12 KB,四问各一节)+ `产品框图-热点与选题-2026-10-11.html`(15 KB,architecture)+ `功能流程图-热点到选题-2026-10-11.html`(13 KB,flowchart)。另存两张渲染截图作证据。
- **口径层关键结论**:现版**没有**叫「热点」的板块;P2 只有 4 块(对标监控概览/对标内容/评论区洞察/选题库)。本棒把「热点」定义为**信号来源(发现侧)**=三块 + 选题库里「数据异动」类型;「选题」=选题库那一块(F2)。⛔ 未改名、未新增板块。
- **第二个结论**:Easel 的判断层=**七维打分**(判「做不做」);现版的判断层=**选题库的「类型」维度**(判「下一步去哪」)。别把 Easel 的打分体系当成现版缺口的补法。
- **7 处断点**:只在文档里登记,⛔ 一条都没动手(改②段属扩范围,要用户点头)。
## 复跑时照做(下次触发直接抄)
1. **先抢域锁**:`handoff-guard.sh --claim-exec "[执行]-[产品规划]-…" --domains "E:/ProgramData/AIProject/contentm_agent/执行会话"`(用 PortableGit 全路径 bash)。收工 `--release-exec`,名字照 `OWNER` 里 `ME` 的**原文**放(别带派活前缀),放完复核 `.locks/` 零残留。
2. **只读**起点的两份输入:Easel 逆向报告(`…-547748/第1棒_*.md`)+ 现版 `2a`/`2b`(`…-fa6e07/`)。⛔ 一个字都不许改。
3. **画图只用 `diagram-design`**:`product-planning/references/stage-requirements/assets/diagram-design/SKILL.md`。产品框图选 `architecture`,功能流程图选 `flowchart`。出图后**必跑** `scripts/self_check.py <file>`;要视觉校验就起 browser-harness(先探 9223,未在跑才用**本会话后台任务**起),**一个标签页 `goto_url` 复用**,用完 `close_tab` + `list_tabs()` 归零,并把后台保活任务停掉。
4. **上报**:`collabd.py --report <sid> --state done --artifact "<目标目录内的一份>"`。⚠️ 只吃**一个** `--artifact`(取首次出现)⇒ 给「检查会话能当入口」的那份(逻辑关系文档,文末列全三条路径)。
5. **不写 `目标执行状态.md`** —— 按合同那是检查会话的活。
## 硬红线(每轮照守)
- ⛔ 不改现版原型 `ui/mcn-workbench.html` 与 `2a`/`2b`;页 7/导航名序/板块 39/流转 20/对象 11 一律保持。
- ⛔ 不改任何板块名、不新增板块(用户 2026-10-10 逐字:「没让改的 交互不允许乱改」)。
- 落点一律 `<目标目录>/`,⛔ 不散到工作区其它目录。
@@ -0,0 +1,11 @@
# 自动化记忆 · 目标检查会话(contentm_agent)
> 本文件只记**高层执行历史**,⛔ 不放大段正文与交付内容。
## 2026-10-10 23:36 · 第 47 棒 · 目标「侧栏改回64px基准形态并刷新按钮改icon」
- **判定**:目标**已完成**,`lifecycle` 已置 `已完成`(常驻随之优雅退出)。
- **依据**:三条验收判据**全 `过`**,四道门禁**本棒现跑**(`check_js` 通过/`check_skeleton` 七页 39 块一致/`grab_selftest` PASS 80-0/`mutate_test` 27-27),并做了源码直读交叉验证(`--nav-w:64px`、`.nav-item` 竖排、`.btn-icon`+`.shell-refresh` 挂标题行;`NAV`/`PAGES` 与 V4 逐字相同)。
- **动作**:补写 `目标执行状态.md`(本目标第一份)→ `goalctl declare --kpi` 回写机读副本 → `collabd --set-life 已完成`。未派执行棒、未动产物、未动域锁。
- **可复用口径(本棒最重要的一条)**:**执行棒不写状态文档是常态**(`fa6e07`/`20a8ac` 两次同型)⇒ 检查会话见「产物在盘 + 文档空骨架」**不是判不出来,是该由它补写**;补写前必须**现跑门禁**,⛔ 不抄执行棒记录里的数。
- **遗留待用户裁定**:窄屏两档密度红;目标目录名两套口径(派活单 `…41c8bd` vs 机制 `…20a8ac`)。
@@ -0,0 +1,14 @@
# 自动化 5587a951 · 执行摘要
## 2026-10-10 22:46 · 第 1 棒(会话 `3f59c890`):逆向 Easel 热点雷达与选题链路
**结论**:三条判据全部判「过」,已上报 `done`。
- 产物落 `执行会话/目标-逆向Easel热点雷达与选题链路补齐现版-547748/`:`目标执行状态.md`(在骨架上补,未推倒)+ `第1棒_逆向Easel热点雷达与选题链路_2026-10-10.md` + `取证/` 14 份 Easel 源码原文。
- 取证路线:本机 `raw.githubusercontent.com` 不通,走 `api.github.com/repos/ZJU-REAL/Easel/contents/<path>` 取 base64 落盘再 grep(`web/app.py` 237 KB 也照此办)。
- 对 `2a`/`2b`/原型/`DESIGN.md` **零改动**,落地方案只写进文档。
- 域锁 `contentm_agent/执行会话` 已抢已放(按 OWNER 的 `ME` 原文),复核 `.locks/` 为空。
**下次可直接用**:Easel 热点链路源码坐标在当日日志 2026-10-10.md 里(app.py 4666-4775 与 4890-4963、App.tsx 540-547),不必再全仓翻。
**遗留**:落地方案里的四个数值(近 30 条中位数/样本 10 条/3.0/2.0)是建议值,等用户拍板。上报时出「不在目标目录内」软提醒 —— 目标在 22:49 又被换成「侧栏改回64px…」,属既有分岔。
@@ -0,0 +1,12 @@
# 自动化记忆 · [检查]-[目标检查]-contentm_agent
## 2026-10-11 19:35 · 第 50 棒(首次执行)
- **任务**:核对目标「按全球口径重做平台矩阵与热点源含海外主流」(`goal_fp=39646d`)完成状态。
- **判定**:**已完成**。上一轮(第 49 棒 18:55)判「全不过」是因为执行棒还没跑;本轮执行棒 `8d7d02b3` 已于 19:28 上报 `done`,产物落 `执行会话/目标-按全球口径重做平台矩阵与热点源含海外主流-39646d/`。
- **处置**:补写 `目标执行状态.md`(判据表改 `过`×3、结论、对账)→ `goalctl.py declare --kpi` 回写 → 回读确认 → `collabd.py --set-life 已完成`(常驻随之优雅退出)。未派新棒。
- **可复用经验**:
1. 状态文档由执行棒之外的人写 ⇒ 检查棒必须「补文档 + 回写 kpi + 改生命周期」三件一起做,改完回读。
2. `--kpi` 按 `;`(中文 `;` 会被先替换)切 ⇒ 依据里不能出现任何一种分号。
3. 触发通报里「本项目没有别的待执行排期」**不可信**,派棒前必须自己 `automation_update list` 核一遍。
4. 本工作区 `state.py` 与 `taskgraph.json` 都不存在,模板第 1、3 项跑不出来,用 `collabd.py --domain-status` 与状态文档补齐。
@@ -0,0 +1,6 @@
# 自动化记忆 · 目标检查(第 47 棒起)
## 2026-10-11 04:2x · 第 47 棒
- 目标「根据Easel分析梳理热点和选题板块功能的逻辑关系,并画出产品框图和功能流程图」=**已完成**(lifecycle 已改,04:25:01)。
- 处置套路:台账全 done + 产物实测三件齐 ⇒ 补写 `目标执行状态.md` → `goalctl.py declare --kpi` 回写并回读 → `collabd.py --set-life 已完成`。未派新棒。
- 环境两处:`state.py` 与 `taskgraph.json` 在本工作区**不存在** ⇒ 检查时按「台账 + 判据」两路判即可,别当故障报。
@@ -0,0 +1,9 @@
# 自动化执行记忆 · 目标检查会话(contentm_agent)
## 2026-10-11 17:2x · 第 48 棒
- 对象:目标 `8a649c`「征询GPT对选题板块细节的建议并重画框图流程图」。
- 结论:**已完成**。台账 26 条全 `done`,无僵尸件;三条验收判据复核全过。
- 动作(三件一起做,已回读确认):补写 `目标执行状态.md` → `goalctl.py declare --kpi … --yes` 回写 → `collabd.py --set-life 已完成`。
- 现场事实(下次直接沿用):工作区根**没有 `state.py`**,改用 `goalctl.py` 默认输出顶替;`taskgraph.json` 不存在(本期未启用);`--set-life 已完成` 会让常驻优雅退出(机制预期,不是故障)。
- 未派新棒。