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

16 KiB
Raw Blame History

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。

一、仓与位置

  • 工作区仓 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 保活)。动手前 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-09 用户令):同一类事情放同一个页面(找选题/拆解选题/做选题都属「选题相关的事」⇒ 同在选题页)。两条配套口径:资产入库不限页(任何页产生资产都可就地入库,资产库页=统一管理的地方,⛔ 不是唯一入库口;「一个对象只有一处产生」管的是唯一权威数据、⛔ 不是写入动作的地点);选题库容纳「对选题有帮助的任何信息」(随手记仍落选题库,⛔ 不新增「待整理」状态,靠分类区分)。
  • 🔴 「复盘」=发布之后看结果:看数据 + 看收入(用户 2026-10-09 22:48 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」(发布记录/溯源/对账/商单与收支)属复盘、是同一类事,留在复盘页,⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分(GPT 主张拆出去的三条 G7/G10/G22 ⇒ 不采纳)。
  • 🔴 「账号」是两个概念,现行定义(2026-10-10 用户逐字「内容账号管的是内容属性(主要是账号设定 内容做成什么样),平台账号应该是 发布的渠道三方平台账号 用户发布具体内容」):内容账号=管内容属性(账号设定:定位/风格/受众/偏好红线/长期记忆),平台不属于它;平台账号=发布的渠道(三方平台账号,"发布具体内容"用的就是它),登录态/授权归它。⇒「渠道」=平台账号(⛔ 不再说"账号 × 平台")。建模(主会话自决、可推翻):不加对象,平台账号做成内容账号下的子项清单(1 → N,每项带「平台 + 登录态 + 授权状态」)。⚠️ 待落地:2b 画像六维去掉「平台」那一维;2a F7 守卫"一个账号 + 一个平台"改成"+ 一个平台账号"、发布记录"渠道"同指平台账号。
  • 🔴 本区当前目标(2026-10-09 22:52 声明)=「分析 social-auto-upload 项目,用于投放页与发布对象的判断」,类别 开源项目调研(用户令逐字:「分析 https://github.com/dreammis/social-auto-upload 这个项目在做判断」)。✅ 执行棒 254f554c 已于 23:0x 交付:执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/social-auto-upload 分析与对照.md(30 045 B)。✅ 2026-10-09 23:58 第 42 检查棒判「已完成」(补写该目录 目标执行状态.md;修掉 execution_doc 仍指旧目标 b49e02 的漂移;常驻随之优雅退出)。三条结论:① 投放页可改 5 条(目标选择补「先平台后账号」/Account 补登录态属性/⛔ 不抄批量铺排/定时要在「平台原生 vs 本地调度」里选一条/⛔ 别削发布记录);② 不加「发布事件」对象(该项目连发布记录都没有 ⇒ 样本量为零,我们倾向的理由站得住);③ PublishRecord 若一版发多渠道会分不清渠道 ⇒ 加字段或写死「一版一路」,⛔ 不是加对象。🔴 待拍板 3 条:账号带不带平台(我们 Account 字典 vs F7 守卫自相矛盾;倾向带)|要不要做定时(倾向先不做)|PublishRecord 带不带渠道字段(倾向写死「一版一路」)。
  • 📌 已收口的旧目标(细则在当日日志):①「导航改七项一层并重排功能归属(P8 并入复盘)」(fc471a,15:48 收口);②「征询 GPT 对当前七页结构与操作路径的建议」(b49e02,16:46 收口;GPT 原文 10 562 字符逐字留痕;🔴 D1 待裁定=GPT 主张拆「记录与对账」出复盘,与用户拍板方向相反);③ 四步(梳理→GPT→重做②段→重生成界面,071c5b,08:14 收口)。

三、②段两份的现行口径(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 "<路径>":产物读不到⇒硬拒收;落点不在目标目录只给软提醒(不拒收)。
  • 🔴🔴 目标目录名两种口径(已实证 3 次):机制=goal_dir_name() title[:20] 再去空格;而派活单与实际目录一律用全称去空格 ⇒ 上报必带一条「不在目标目录内」软提醒,属既有分岔、不拒收(如本目标:机制 …upload-0ec0a7 vs 实际 …upload项目,用于投放页与发布对象的判断-0ec0a7)。⛔ 改名会断台账 artifact 引用 ⇒ 未修,待裁定。
  • 🔴 浏览器实例/计划任务:浏览器保活用计划任务 bh-chrome-keepalive(动作 pythonw.exe "E:/ProgramData/AIProject/contentm_agent/bh_chrome_keepalive.py",幂等:端口在听就退出;每 5 分钟 + MultipleInstances=IgnoreNew + ExecutionTimeLimit=0;脚本放工作区根,⛔ tmp/ 会被清)。验证=netstat 见 LISTENING + curl --noproxy '*' http://127.0.0.1:9223/json/version 回 JSON。⛔ 别用「后台任务」(只活到发起它的会话结束)。⚠️ 建计划任务一律用 pythonw.exe(python.exe 是控制台程序 ⇒ 每分钟弹黑窗);schtasks.exe 被本机黑名单拦截 ⇒ 走 PowerShell ScheduledTasks 模块。