目标已完成核实(三判据全过/闸门现跑/逐视口3档红登记)+ 收口搬运②段两份到 docs/pm/prd/ + 订正机读副本判据措辞

This commit is contained in:
WorkBuddy committed 2026-10-10 22:25:02 +08:00
1 parent b30e48c1fc
commit f536a0c201
10 files changed
+1316 -19

No files matched your search

+98
View File
@@ -86,3 +86,101 @@
8、**F7 展开单位改平台账号 + F13 补「一版一路」**(`PublishRecord` 不加渠道字段)。
**挂起项**:**定时发布** —— 记在目标 why 与队列里,等做投放功能时再议。
## 22:23 · 核实目标完成情况(用户问「目标完成情况如何」)
**目标「把八条已定口径落进②段两份与原型」= 已完成** ✅ —— `lifecycle=已完成`,**三条判据全过**(检查会话逐条真核过)。
**过程**:主棒 `d7ea834b`(08:23 上报 done)只交付产物、**没写 `目标执行状态.md`**、也没把验收结论写回机读副本 ⇒ 补齐棒 `6f6cd256`(09:1x)按文档合同补上,**核完三条全过 ⇒ 该棒零改动**(2a/2b/原型/DESIGN/实测记录一个字未动)。
**五道闸门现跑**(⛔ 一个数不沿用书面值):`check_js` PASS / 骨架冻结 **七页 39 块** PASS / 自检 **PASS 78 / FAIL 0** / 变异 **24/24** / 逐视口 16 档整表重跑 **不达标 3**(窄屏三档,已登记、不阻断)。
🔴 **变异对照有效**:M16(首项改「首业」)与 M21(塞回 `.nav-group`)**两条报红落在同一判据** ⇒ 那条判据不是恒绿。**"报红"在这里是好事**(判据真在工作),别读成缺陷。
**产物**(`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/`):`2a-产品功能-新版.md` 61 683 B / `2b-界面布局-新版.md` 52 256 B / `ui/mcn-workbench.html` **149 047 B**(V4)/ `ui/DESIGN.md` 63 411 B / `ui/3b-实测记录.md` 28 703 B。
**八条口径落成了什么**(`2b` 行 4/17/21-22/30-31 逐字):P2 由 5 块收成 4 块(「灵感速记」并进「选题库」)/ P6 由 4 → 5 块(画像六维 → **画像五维** + 新增**平台账号**块,带平台+登录态+授权状态)/ 投放页目标选择改**两级**(先内容账号、再勾平台账号)/ 业务板块总数**仍 39**(一减一加,净变化 0)。
**本轮主会话自决做的两件**:
1、**订正机读副本判据的措辞**(检查会话指出但按规矩未擅改):原写「账号画像六维」⇒ 改成「画像五维 + 平台账号块」,与②段实际一致。
🔴 **顺带踩到第二个 kpi 坑**:`goalctl declare --kpi` 的判据文本里**不能出现全角分号/括号/斜杠** —— 第一次写 `(…;…/…)`,工具把它们当**分隔符切碎**,中间两段被吃掉(只剩带 `=` 的碎片被当成判据)。改用**最简文本**重设才成功。⚠️ 与 10-09 那个"等号必须半角"是同一族的坑:**判据文本只用最朴素的字符**。
2、**收口搬运**:②段两份归档到 `docs/pm/mcn-shortvideo-agent/prd/`(该目录新建),归档名去掉"新版"= `2a-产品功能.md`/`2b-界面布局.md`;⛔ 源文件保留(零删除)。
**遗留 8 条**(检查会话写在 `目标执行状态.md` §四),其中**要用户裁定**的三条:窄屏三档密度红(是否动断点)/ P7 一页两个主操作(是否再议)/ 两处假设(P1 形态、P7 第 10 块「商单与收支」是否进第一版)。
## 07:4x–08:0x · TrendRadar 接入智谱 GLM(模型 `glm-5.3-flash`,用户指定「思维链要较低档」)
部署位置(承 10-09 那次):源码 `E:/ProgramData/AIProject/trendradar`,容器 `trendradar`(8080) / `trendradar-mcp`(3333)。
- **配置落点(已生效并验证)**:`docker/.env` = `AI_ANALYSIS_ENABLED=true`|`AI_API_KEY=<智谱 key>`|`AI_MODEL=openai/glm-5.3-flash`|`AI_API_BASE=https://open.bigmodel.cn/api/paas/v4`。智谱走 OpenAI 兼容端点 ⇒ 模型名**必须带 `openai/` 前缀**(项目 config.yaml 注释里写了这条规则)。`config/config.yaml` 的 ai 段:`max_tokens` 5000 → **16000**,新增 `extra_params.extra_body.thinking = {type: enabled, level: low}`。
- 🔴 **智谱 GLM-5 系列三条硬事实(实测可复用)**:① **不能关思考**,传 `{"type":"disabled"}` 或 `{"type":"low"}` 都报 `code 1210`,原文「该模型始终思考,不支持关闭思考;请使用 low、high 或 max」。② **低档只有一种写法**:`{"type":"enabled","level":"low"}`;只写 `{"level":"low"}` 或加 `effort`/`budget` **不报错但不生效**(服务端忽略未知键,reasoning_tokens 与默认持平)—— 判据看 `usage.completion_tokens_details.reasoning_tokens`。③ **litellm 透传私有参数唯一通道是 `extra_body`**:直接 `completion(thinking={...})` 抛 `UnsupportedParamsError: openai does not support parameters: ['thinking']`;改 `extra_body={"thinking":{...}}` 才生效 —— 同一样本 reason_tokens **969 → 236**、总耗 1511 → 724。
- 🔴 **「AI 返回空响应」的真因不是 key 错,是思维链吃光预算**:`client.chat()` 取 `choices[0].message.content`,为 None 就返回 `""` ⇒ analyzer 记空响应(`trendradar/ai/analyzer.py:562`)。实测真实体量(150 条 + 官方 prompt)在 **low 档下 reason 仍要 3557 token**、total 4074,逼近 5000 上限 ⇒ 数据再大就 `finish_reason=length`、回答被截空。**「降档」与「放宽预算」必须一起做**,只降档不提预算照样失败(已实证一轮)。
- **对项目源码的一处改动(第三方项目,改动处已写中文注释)**:该项目的 `ai.extra_params` 是**读了不用的死配置** —— `trendradar/core/loader.py:273` 读进 `EXTRA_PARAMS`,`trendradar/ai/client.py` 从不消费 ⇒ 光改配置不生效。改 client.py 两处:`__init__` 增 `self.extra_params`,`chat()` 里把 `extra_body` 合并进 `params["extra_body"]`、其余键按原「只补不覆盖」并入。
- 🔴 **让改动进容器靠挂载覆盖,不改镜像**:`docker/docker-compose.yml` 的 trendradar 服务 volumes 增 `../trendradar:/app/trendradar:ro`;验证=容器内 `trendradar.__file__` 为 `/app/trendradar/__init__.py`。好处=官方镜像照常 pull 升级,本地补丁仍在。
- ⚠️ **改挂载进来的配置文件不会触发 recreate**:只改 `config.yaml`/`.env` 后 `docker compose up -d` 显示 `Running` 而非 `Recreated`,容器仍跑旧值(日志里 `max_tokens` 一直是 5000,白等一轮)⇒ 必须 `docker compose up -d --force-recreate trendradar`。
- **验证**:日志 `[AI] max_tokens=16000` → **`[AI] 分析完成`**,翻译 7/7 成功;报告 `output/html/2026-10-10/08-02.html` 152 136 B(无 AI 的旧版 147 871 B),含 6 处「AI 分析」字样 ⇒ 内容真写进去了。
- **遗留**:雅虎财经 RSS 源 404(官方默认源,非本次引起);未拍板=要不要把 `ai_analysis.max_news_for_analysis` 从 150 降到 80(减思考量省钱,代价是报告覆盖的新闻变少)。
## 08:02–08:2x · 执行棒交付「把八条已定口径落进②段两份与原型」(sid `d7ea834b`)
落点 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/`(起点=`fc471a` 只读,md5 复核未被改)。上报 `--state done`,域锁 `[执行]-[产品规划]-把八条口径落进②段与原型` 已 `--release-exec` 释放(实测锁库已空)。
**八条口径 → 落点(逐条可对)**:
1、一类事情放同一页面 → `2a` §一 第 2 条整条重写 + 七页复核表(**页集合一个没动**);
2、资产入库不限页 → `2a` §二 `Asset` 产生位置改「P2/P3/P4 均可」+ `2b` P3 职责改「统一管理」+ P2 对标内容写明可就地入库;
3、选题库分类 → `2b` P2 新增「**进度 × 类型**两个正交维度」(类型=选题/对标线索/评论洞察/数据异动/灵感;随手记默认落「灵感·待做」);
4、记录与对账属复盘 → `2b` P7 十块**平铺不划子区** + 写死属「发布之后看数据与看收入」;
5、一条内容对多渠道 → `2a` `PublishTask` 定义改「含**发布渠道**」;`2b` P5 摘要区改「目标渠道数/覆盖平台数」;
6、账号两概念 → `2a` `Account` 改「**内容账号**」+ 新增「平台账号」五条说明(子项、不进表、不进计数、不加对象);`2b` P6 画像**五维** + 新增「平台账号」块;
7、投放页两级目标选择 → `2b` P5 第 1 块写清「先内容账号 → 再勾它的平台账号」;
8、F7 展开单位/F13 一版一路 → `2a` F7 改名 + F13 补「一版一路」(`PublishRecord` 不加渠道字段)。
**骨架账**:P2 5→4 块(「灵感速记」并进选题库,⚠️**顺手订正 V3 遗留的板块清单 ↔ 分档表打架**)、P6 4→5 块(新增平台账号)⇒ **总数仍 39**(逐页 5/4/4/6/5/5/10)。页数、导航一层七项、流转 20 条、令牌与几何**一格未动**。
**原型三条真改动**:① `S.targets:{accounts,platforms}` → `{accounts,channels}` + 新增 `PLATS` 数据;② 交互清单 88→90 个 ID(**撤 `P2-11`**,增 `P2-12`/`P6-06`/`P6-07`);③ `PROFILES` 删 `平台` 字段。
**闸门实测(全过)**:骨架 `PASS`(`check_skeleton.py`)|自检 `78/0`(全文存 `_scratch/selftest-v4-1440.txt`)|变异 `24/24`(存 `_scratch/mutate-v4.txt`)|逐视口 16 档 `不达标 3/16`(**整表重跑,逐格与 V3 完全相同**——本轮改的是 P2 选题库/P5/P6,没碰被量的 P1 与 P2 对标内容)|命名 `2060|0|27`。另做骨架闸门**四条反向变异**(板块名/数/顺序/再命名,改 2b 副本 ⇒ 全报红,验完还原)。
**必记两条**:
- 🔴 **改骨架两侧必须同步**:`2b` §五 板块清单与原型 `FROZEN` 是**双写**,任一侧改了另一侧不改 ⇒ `check_skeleton.py` 报红;**改完两侧都要跑一次**。
- 🔴 **「撤 ID」必须同时删 DOM**:撤 `P2-11` 若只删 IMPL 不删按钮 ⇒ 自检「页面上每个 data-act 都在清单里」报红;反之只删 DOM 不删 IMPL ⇒ 「声明了但页面里没有」报红。**两个方向各有一条判据盯着**。
**遗留待裁定(已登记,⛔ 未擅自动手)**:窄屏三档密度红(`560/500/390`,与侧栏宽度无关,成因=Page Shell 抬首行顶);「满宽表格」与「一屏 ≥6 行」窄屏不可兼得;P7 一页两主操作;P1 形态与 P7「商单与收支」两处假设仍未获用户结论;目标目录名全称 vs `title[:20]` 口径分歧(沿用)。
## 08:30 · 检查棒第 43 棒:判「八条口径」目标完成度 ⇒ **判不出来,已停手**
- 🔴 **唯一阻塞**:`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/` 下**没有 `目标执行状态.md`**(实测该目录只有 `2a-产品功能-新版.md`、`2b-界面布局-新版.md`)。派活单把这份文档定为「判断目标状态的唯一依据」,并写明「读不到 ⇒ 判不出来并停手,⛔ 不许去别处找」⇒ 本棒照办:**未派活、未改 `lifecycle`、未改 `acceptance_state`**。
- **机制侧三处漂移(本棒实测,未改)**:① 工作区根 `state.py` **不存在**(派活单第 1 项读不到);② `tmp/supervise-inbox/taskgraph.json` **不存在**(第 3 项读不到);③ `goal.json.execution_doc` 换目标后**仍指着上一目标 `0ec0a7` 的文档**(上一棒已在旧文档里写「本目录此前没有状态文档,由检查会话补上」⇒ 同型缺口在新目标上又出现一次)。
- **其余输入**:`tasks.json` 台账 20 条全 `done`|`goal.json.acceptance_state` 三条仍停在 `未过`(`declared_at 07:57`,早于执行棒 08:2x 交付 ⇒ 与文档口径不同步,本棒未采信、也未回写)|`collabd.py --domain-status` = 无人持域锁。
- ⚠️ **下一棒的坑**:文档若仍缺失 ⇒ 第 44 棒会得出同一个「判不出来」,目标一直停在「进行中」。要破这条链,得先有人把 `目标执行状态.md` 写出来(文档合同里这件事归**目标检查会话**,第 42 棒就是这么补上的)。
## 09:05 · [检查]-[目标检查]-第 44 棒(目标:把八条已定口径落进②段两份与原型 · fa6e07)
- **判定=未完 ⇒ 已派执行棒**(与第 43 棒「判不出来即停手」的处置**不同**,理由见下)。
- 三路读数:台账 `d7ea834b` **done**(08:23:37,artifact=目标目录)|`taskgraph.json` **不存在**(无未完节点)|`goal.json.acceptance_state` **三条值=`未过`**(有效判据 3 条,非过 ⇒ 并集判「没完」)。
- 🔴 **破链动作**:第 43 棒因「状态文档读不到 ⇒ 停手」留下死结(文档归检查会话写,而检查会话又因缺文档不敢动 ⇒ 目标永远停在「进行中」)。本棒跑 `--ensure-goal-dir`(幂等)补出 `目标执行状态.md` **空骨架**,再按 §三.2 派棒补齐核验 ⇒ 链断在这里。
- ✅ **派棒**:`[执行]-[产品规划]-补齐目标执行状态文档并逐条核验三条判据`,id `6b520c68`,`once` 09:09,域=`执行会话`(域键 `contentm_agent/执行会话`,派前 `--domain-status` 无人持锁)。派前已 `list` 确认无同目标在跑的执行排期。
- ✅ **顺带修正**:`goal.json.execution_doc` 原指向旧目标 `0ec0a7` 的文档,已由 `--ensure-goal-dir` 对齐到 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md`。
- ⛔ **未动**:`lifecycle` 仍「进行中」|`acceptance_state` 未回写(三条 `未过` 是 07:57 声明时写的,早于 08:2x 交付 ⇒ 属「还没判」,采信它会误判)。
- 📌 记忆里可提的点:**执行棒交付后不写 `目标执行状态.md`** 是本区反复出现的缺口(071c5b/fc471a/0ec0a7 都有该文件,fa6e07 没有)⇒ 派活单里应把「写状态文档」列进执行棒的必交产物。
## 09:1x · [执行]-[产品规划]-补齐目标执行状态文档并逐条核验三条判据(棒 `6f6cd256`,目标 fa6e07)
- **三条判据逐条真核 ⇒ 全过,本棒零改动**(2a/2b/原型/DESIGN/实测记录一个字未动)。
- **五道闸门全部现跑**(⛔ 不沿用上一棒书面值):`check_js.py` 两条 PASS(script 段 1439 行 node --check 过 + 模板反引号 0)|`check_skeleton.py` PASS 七页 39 块逐位一致|`grab_selftest.py` 1440×900 **PASS 78 / FAIL 0**(控制台报错 0)|`run_viewports.py` 16 档整表重跑 **绿 13 / 红 3**|`mutate_test.py` **24/24**|`check_naming.py --ws` **2060|0|27**。浏览器走本机常驻 9223(pid 1988),⛔ 未另起;收工 `tab_close.py` 已关本棒那一个标签。
- **判据 1(2a 八条口径)过**:八条逐条有落点 —— §一 第 2 条(一类事一页)/§一 第 4 条 + §二 `Asset`(入库不限页)/§二 `Topic` + §三 F2(进度 × 类型两维五类,⛔ 无「待整理」)/§三 F12·F13 归 P7 + `2b` P7 十块平铺(记录与对账属复盘不拆)/§二 `PublishTask` 含发布渠道(渠道 = 平台账号)/§二 `Account` + §三 F9(账号两概念,对象数仍 11)/`2b` P5 第 1 块两级/§三 F7 展开单位 = 平台账号 + F13 一版一路。全文「账号 × 平台」6 处**全在否定语境**,无残留误用。
- **判据 2(2b 与原型同步)过**:导航/P6/P7/P5 四页逐页核过,骨架闸门一条 PASS 覆盖。⚠️ **判据里写「账号画像六维」,②段与原型实际是「画像五维 + 平台账号块」(P6 4→5 块)** ⇒ 已在文档 §二 写明差异并**采信②段实际(五维)**,依据=用户 10-10 口径「平台不归内容账号」。「六维」是改口径前的旧写法,属机读副本措辞待订正(已列进待裁定)。
- **判据 3(闸门全过)过**:逐视口 16 档红 3 档(`560×900` P1 5 行/`500×844` P1 3 行/`390×844` P1 0 行 + P2 5 行)按「已登记、不阻断」计过 —— 依据:三档数值与 V3 **逐格相同**(非本轮引入)、成因已实测与侧栏宽度无关、整改需动窄屏几何属**扩大可见面 ⇒ 红线须先问用户**。已在文档写全 A6 例外三字段(卡在哪/做到哪步/什么条件必须回头)。
- ✅ 产物=`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md`(补齐「一/二/三/四」四节,结论只用 `过|依据` 规范写法)。已 `--report <sid> done --artifact` 上报;三条结论已 `goalctl.py declare --kpi` 写回并**回读确认**(⚠️ 踩坑:`--kpi` 按**分号**切,依据里写 `;` 会被切成假判据 ⇒ 依据里⛔ 不许出现任何分号)。
- ⛔ 未动 `lifecycle`(仍「进行中」,收口归检查会话)|⛔ 未搬正式归档|⛔ 定时发布未做(用户挂起)。
## 09:3x · [检查]-[目标检查]-第 45 棒 ⇒ 目标 fa6e07 收口为「已完成」
- **三路取并集判完成**:`tasks.json` 22 条全 `done`(无 `running` 僵尸件)|`taskgraph.json` **文件不存在**(⛔ 未据此判未过,也⛔ 未去别处找)|`acceptance_state` 三条**全为 `过|…`**,与文档逐条对上 ⇒ **判完成**。
- ✅ 先确认再写回:`goalctl.py declare --kpi` 三条重声明(先 dry-run 读回显确认 3 条完整、再 `--yes` 真写),回读 `goal.json` ⇒ `declared_at=09:34`、`declared_by=[检查]-…-第45棒`、三条依据原样在。
- ✅ `collabd.py --set-life 已完成 --by "[检查]-[目标检查]-contentm_agent-第45棒"` ⇒ `进行中 → 已完成`;回读 `--check-status` = `已完成|队列未完成 0|静默 7.2 分钟|会话全结束|已建检查会话 45 棒`。
- ⚠️ 副作用留痕:设「已完成」时**常驻程序被优雅退出**(pid 8236,因「目标已完成」)—— 这是设计行为,下次开新目标需重新拉起。
- ⚠️ 两处工具现状:`state.py` **不在工作区根**(派活单第 1 项跑不到);`--domain-status` 现跑=**无人持域锁**(本棒未派活)。
- ⛔ 本棒未派新活、未改②段与原型一个字;待用户裁定项(六维措辞/窄屏三档断点/定时发布)原样留档。