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

68 lines
19 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.
# contentm_agent · 项目长期记忆
> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。
> 整理纪律:**同一件事只在一处写全**,别处只引;细则进当日日志,跨会话有用才上提这里。
> 🔴 **本文件 2026-10-09 压缩过一次**(原 22.5 KB,注入时被截断)。压缩前全量存同目录 `MEMORY-压前全量-20261009.md`。
> ⚠️ 本文件按 ~9 KB 维护:**再加内容先删等量旧内容**,超过就会被截断(等于白写)。
## 一、仓与位置
- **工作区仓** `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`。
## 二、产品规划四段流水线(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-09 用户令,优先于旧的"按业务对象归属")**:**同一类事情放同一个页面** —— 例:找选题、拆解选题、做选题都是"选题相关的事",就该同在选题页。配套两条已定口径:**资产入库不限页**(任何页产生资产都可就地入库,**资产库页=统一管理的地方**,⛔ 不是唯一入库口;「一个对象只有一处产生」管的是**唯一权威数据**、⛔ 不是**写入动作的地点**);**选题库容纳"对选题有帮助的任何信息"**(随手记仍落选题库,⛔ 不新增"待整理"状态,**靠分类区分**)。🔴 **「复盘」这一类事=发布之后看结果**:**看数据 + 看收入**(用户 2026-10-09 22:48 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」(发布记录/溯源/对账核对/商单与收支)**属复盘、是同一类事**,留在复盘页,⛔ 不拆页、⛔ 不加导航项、⛔ 页内也不分区(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。
- 🔴 **本区当前目标**(2026-10-09 16:12 切)=「**征询 GPT 对当前七页结构与操作路径的建议**」,类别 `产品规划`。用户令:「问 gpt 对现在的 产品页面结构 操作路径 有什么建议」。判据 3 条:现状说明成可外发材料 | 建议取回并**原文留痕** | 逐条「采纳/不采纳+理由」。✅ **第 1 棒 `4de53e43` 已于 16:35 交付**:`现状说明-七页结构与操作路径.md`(可外发)+`GPT-对页面结构与操作路径的建议.md`(原文 10 562 字符逐字留痕 + 32 条处置:采纳15/部分采纳8/已在3/不采纳1/待拍板5)。落点=`执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/`(⚠️ **实目录不含空格**;上报时报「不在目标目录内」=**已登记的命名分岔**,软提醒不拒收)。🔴 **最大冲突待裁定(D1)**:GPT 主张把「记录与对账」拆出复盘,与用户刚拍板的「P8 并入复盘」**方向相反** ⇒ 待用户定,⛔ 未自行改。
- ✅ **上一目标**(2026-10-09 14:29 切)=「**导航改七项一层并重排功能归属(P8 并入复盘)**」,类别 `产品规划`。用户令:左侧导航**一层七项**=首页/选题/创作/投放/复盘/账号/**资产(排最后)**;P8 记录与对账**并入复盘**(功能搬进复盘页当板块);**所有功能与各自板块一一对应**;P5 发布中心在导航里叫**投放**(改名+页内写清边界,⛔ 不扩功能)。执行棒 `852743de`(once 14:32),落点 `执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/`。✅ **本目标已由执行棒 `4927305a` 于 15:0x 交付**:三件改动(P8 整页并入 P7/导航压成一层七项/功能↔板块对应做成机检)+闸门全过(语法|骨架七页 **39 块**|自检 **78/0**|变异 **24/24**|命名 **2060|0|27**|逐视口 13 绿 3 红)。⚠️ **两条订正**:板块总数是 **39 不是 41**(P8 那 4 块是搬位置、净变化 0);V2 记的窄屏红档成因「主区变窄」**实测不成立**(侧栏收窄 56px 后 P1 首行顶逐档不变)。✅ **已由目标检查·第 38 棒于 2026-10-09 15:48 收口**(四条验收逐条「过」,本目标第一份 `目标执行状态.md` 已落真实目标目录;副作用=常驻优雅退出,设计行为)。🔴 **目标目录名两种口径(未修,待裁定)**:机制=`title[:20]`**去空格** ≠ 派活单**全称(含空格)** ⇒ `exec_doc_rel()`/`goal_dir_rel()` 指向**不存在的目录**,状态文档规范路径**永远读不到**(`goal.json.execution_doc` 至今停在上一目标 071c5b);⛔ 改名会断台账 `artifact` 引用、另建目录多空壳、只改字段会被 `--ensure-goal-dir` 对齐回去。⚠️ 上一目标(四步:梳理→GPT→重做②段→重生成界面)**已于 2026-10-09 08:14 四步全过收口**,凭据见下一行。
- ✅ **上一目标**(四步:梳理 → GPT → 重做②段 → 重生成界面,**2026-10-09 08:14 四步全过收口**):第④棒凭据:`ui/3b-实测记录.md` + `_tools/` 8 脚本 + `_gate_shots/` 17 帧 + `mcn-workbench.html` 137 555 B + `DESIGN.md` 52 163 B,台账 `ab0f2d84` done)。⚠️ **遗留一条待用户裁定**:窄屏 3 档密度红(560×900/500×844/390×844 的 P1 一屏行数低于契约 6 行),已登记不阻断。⚠️ **总闸 `off` 而常驻在跑**(2026-10-09 核实):`collabctl.py ensure` = 幂等收敛「on⇒补齐缺失/**off⇒全停**」,保活任务周期触发它 ⇒ **off 下迟早被收敛停掉**;开关语义是"挡自动续命",⛔ 别把 off 读成"没在跑"。**四步产物索引**:① `产品规划/现状梳理-板块·功能·操作路线.md`|② `执行会话/目标-…-071c5b/GPT-规划意见与采纳决策.md`|③ 同目标目录 `2a-产品功能-新版.md`+`2b-界面布局-新版.md`|④ 同目录 `ui/`(V2 原型 + `3b-实测记录.md` + `_tools/` + `_gate_shots/`)。
## 三、②段两份的现行口径(2026-10-09 新版)
- 改动主线=按「**业务对象 + 数据流转**」解耦(原来「页面=功能=数据」三层揉在一起)。八页**不推倒**,改的是归属判据。
- **归属判据**=这个功能主要**创建/改变哪个核心业务对象**(⛔ 不是「哪页有按钮」)。新增 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 行不可兼得」已登记未动。
## 七、本区会话机制
- 🔴 **域锁的实体不在本工作区**(2026-10-09 实查):`handoff-guard.sh` 的 ROOT 落到**共享锁库 `D:/github/dsh_shenxian/dsh-server-docs/05-交接单/.locks/`**(本工作区**没有** `05-交接单/`,`DSH_DOCS_ROOT` 覆盖**实测无效**——脚本照样打印 `root=D:/github/…`)。⚠️ 目录名被转义成 `_____…-<hash>`(非 ASCII 逐字变 `_`,属既有编码怪癖)。🔴 **释放要按 `OWNER` 里登记的 `ME` 原文**:本次登记的是 `改导航七项一层并P8并入复盘`(**不带** `[执行]-[产品规划]-` 前缀),用全名释放会报「名下无可释放的锁」而**锁其实还挂着** ⇒ 先 `cat <锁目录>/OWNER` 抄准名字再 `--release-exec`。
- 🔴 **开关 `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`),而会话**无论怎么结束都不释放**它 —— ① 被宿主终止(第一次:`a257d30f` 遇 daemon 冷启动换代,`status=terminated`);② **被用户手动关**(第二次:`cc07347c` 卡死后用户关窗,`status=completed`,⚠️ 手动关是标 `completed` 不是 `terminated`)⇒ 都不会跑 `--release-exec`。而域冲突判定**只比会话名、不判死活**,R9 又禁 AI 删锁 ⇒ 只能用户处置。**第二把已实证在 06:33 建、07:10 成孤儿**。✅ **2026-10-09 已有自动解除工具**:`session-mechanism/scripts/lock/orphan-lock.py`(用户 2026-10-09 逐字授权「可以授权 检查会话自解除孤儿锁」= **R9 的唯一例外**)—— 判据是**查宿主库 `sessions.status`**(⛔ 不靠目测 `OWNER`):`working` 不动|`terminated`/`error`/`archived` 可解|`completed` 要过时间闸(`--idle-min` 默认 30 分钟)|查不到 sid ⇒ fail-closed 不动;先 `--dry-run`。本区实测已解开两把(含挂了 10 天的 `ai1net-dsh-anywhere ← [协作]N9复测-2248`)。
- 🔴 **本机浏览器实例要用「计划任务」保活,⛔ 别用后台任务**(2026-10-09 实测):「后台任务」=只活到发起它的那个会话结束(07:18 起的 pid 8236,07:37 已被回收)。正解=计划任务 **`bh-chrome-keepalive`**:动作 `pythonw.exe "E:/ProgramData/AIProject/contentm_agent/bh_chrome_keepalive.py"`(幂等:端口在听就退出),每 5 分钟触发 + `MultipleInstances=IgnoreNew` + `ExecutionTimeLimit=0`;脚本**放工作区根**(⛔ `tmp/` 会被清)。端口 9223,验证=`netstat` 见 LISTENING + `curl --noproxy '*' http://127.0.0.1:9223/json/version` 回 JSON。**同型第二例**:`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`)。