From eee042c855684d13b079fc757028f49329fa172f Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Thu, 8 Oct 2026 22:21:42 +0800 Subject: [PATCH] =?UTF-8?q?=E2=91=A2=E6=AE=B5=E7=AC=AC=E5=85=AB=E8=BD=AE?= =?UTF-8?q?=E6=94=B6=E5=8F=A3=EF=BC=9A=E5=8A=9F=E8=83=BD=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E5=8D=A1=E6=8C=89=E5=8F=82=E7=85=A7=E7=89=A9=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=20=EF=BC=8B=20=E5=AF=BC=E8=88=AA=E6=8C=89=20tiaoyue=20?= =?UTF-8?q?=E6=BA=90=E7=AB=99=E9=87=8D=E5=BB=BA=20=EF=BC=8B=20=E5=AF=86?= =?UTF-8?q?=E5=BA=A6=20A=20=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原型(执行会话/目标-…-d85687/ui/mcn-workbench.html) - 功能入口卡改三段纵向(图标/标题/描述各一行),68 → 111.19px,对齐 mcn-work-shop 参考卡(同视口 1249×1277 实测 133px),补 --sh-L1 投影;主因是排布不是字号 - 左侧导航重建:由「纯图标 + 悬停提示」改为 64px 药丸浮栏,图标 24 在上、名字常驻在下 (名字一律 2 字,说明走 data-tip);真值取自 tiaoyue 源站实测 (栏 64/内衬 3/圆角 100/项 56×78/字 12px-500-行高 16) - 密度 A 方案:≤1000 卡最小宽 200→160、≤820 统计条最小宽 132→96 (两处 auto-fit 只在真装不下时才缩)⇒ 768/700/560 三处转绿,其余 10 个视口未动 - 移动档隐藏导航条横向滚动轨(16px 轨道曾吃掉 52px 条高的三成,还白吃 16px 主区) 取证通道 - _tools/cap.py 改为「只连不起」:只连 9223 常驻实例,视口走 Emulation.setDeviceMetricsOverride, 不再自起 headless Chrome(顺带解除 500px 视口下限,390×844 可测) - _tools/check_js.py 新增第 5 道门禁(node --check + 模板内注释反引号扫描) 文档 - 复盘-为什么第一版做得很差.md(新建):13 轮时间轴/四类反作用/三重归因/已修与仍欠 - 3d-审查报告.md:更正 §九 那条假 ✓(把「§5.5 五条逐条过完」记成机核,实际零覆盖, 正是「五道闸门全绿却难看」的开关),补 §十二 功能入口卡高差、§十三 tiaoyue 导航逐条对照 - 3b-实测记录.md/DESIGN.md/3c-GPT 参考版与会诊/布局排版参考 ×2 机制与记忆 - .workbuddy/collab/collabctl.py:off --ws 不再全机扫描(原先一次杀掉他区+看板共 5 个进程) - .workbuddy/memory/:本轮纪律与实测真值 - .gitignore:补排运行时噪音(ui/_scratch/__pycache__/浏览器取证临时目录/*.bak-*/一次性脚本) 闸门:语法全过/骨架八页 39 板块/变异对照 15-15/逐视口 14 绿(500×844 唯一红,缺口待拍板)/命名 2060-0-27 --- .gitignore | 21 + .workbuddy/.budget-alert-level | 2 +- .workbuddy/.skill-load-guard.state | 2 +- .workbuddy/collab/collabctl.py | 15 +- .workbuddy/collab/collabd.config.json | 5 +- .workbuddy/collab/supervise.switch | 2 +- .workbuddy/memory/2026-10-08.md | 1168 +++-- .workbuddy/memory/MEMORY.md | 91 +- tmp/.session-log-guard.level.json | 2 +- tmp/_oldtask_backup.xml | 44 + tmp/supervise-inbox/_ensure.stamp | 2 +- tmp/supervise-inbox/collabd-state.json | 2 +- tmp/supervise-inbox/guard.stop | 1 - tmp/supervise-inbox/supervise.pid | 2 +- .../prd/2b-界面布局.md | 43 +- .../prd/骨架优化方案-v1-作废-形态误归②段.md | 108 + .../prd/骨架优化方案-v2-②③分段.md | 86 + .../ui/3b-实测记录.md | 627 +-- .../ui/3c-GPT会诊.md | 4 +- .../ui/3c-GPT参考版.md | 3843 +++++++++++++++++ .../ui/3d-审查报告.md | 763 +++- .../ui/DESIGN.md | 877 ++-- .../ui/_gate_shots/P1-1440-7th.png | Bin 0 -> 97306 bytes .../ui/_gate_shots/P1-768-8th.png | Bin 0 -> 95094 bytes .../ui/_gate_shots/P1-nav-640.png | Bin 0 -> 83102 bytes .../ui/_gate_shots/P1-nav-8th.png | Bin 0 -> 103032 bytes .../ui/_gate_shots/P2-1440-7th.png | Bin 0 -> 94927 bytes .../ui/_gate_shots/p1-1024.png | Bin 90907 -> 88452 bytes .../ui/_gate_shots/p1-1440.png | Bin 109238 -> 93662 bytes .../ui/_gate_shots/p1-500.png | Bin 70530 -> 60765 bytes .../ui/_gate_shots/p1-empty-1440.png | Bin 41504 -> 31877 bytes .../ui/_gate_shots/p2-1440.png | Bin 82239 -> 92741 bytes .../ui/_gate_shots/p3-1440.png | Bin 66557 -> 68620 bytes .../ui/_gate_shots/p4-1440.png | Bin 67238 -> 79667 bytes .../ui/_gate_shots/p5-1440.png | Bin 75398 -> 71865 bytes .../ui/_gate_shots/p6-1440.png | Bin 73953 -> 61661 bytes .../ui/_gate_shots/p7-1440.png | Bin 77812 -> 81456 bytes .../ui/_gate_shots/p8-1440.png | Bin 82738 -> 88410 bytes .../ui/_gate_shots/selftest-1440.png | Bin 97469 -> 93697 bytes .../ui/_gate_shots/spot-390.png | Bin 0 -> 50242 bytes .../ui/_gate_shots/spot-640.png | Bin 0 -> 83344 bytes .../ui/_tools/cap.py | 134 +- .../ui/_tools/check_js.py | 102 + .../ui/_tools/mutate_test.py | 375 +- .../ui/mcn-workbench.html | 1268 ++++-- .../ui/复盘-为什么第一版做得很差.md | 227 + .../ui/布局排版参考-AI内容工作台.md | 46 + .../ui/布局排版参考-mcn-work-shop.md | 112 + 48 files changed, 8222 insertions(+), 1752 deletions(-) create mode 100644 tmp/_oldtask_backup.xml delete mode 100644 tmp/supervise-inbox/guard.stop create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/prd/骨架优化方案-v1-作废-形态误归②段.md create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/prd/骨架优化方案-v2-②③分段.md create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/3c-GPT参考版.md create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/P1-1440-7th.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/P1-768-8th.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/P1-nav-640.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/P1-nav-8th.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/P2-1440-7th.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/spot-390.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_gate_shots/spot-640.png create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/_tools/check_js.py create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/复盘-为什么第一版做得很差.md create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/布局排版参考-AI内容工作台.md create mode 100644 执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/布局排版参考-mcn-work-shop.md diff --git a/.gitignore b/.gitignore index dd6d19d..feb7cc6 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,24 @@ # 一次性探针输出 tmp/_*.txt + +# 技能加载运行时标记 +.workbuddy/.load-pending + +# 取证/调试中间件(体量大、可随时重生成) +**/ui/_scratch/ + +# Python 字节码 +__pycache__/ + +# 浏览器取证的临时产物 +tmp/_bh_shots/ +tmp/_figma_preview/ +tmp/_gpt_dl/ +tmp/_bh_chrome.log + +# 文档一次性备份与一次性修复脚本 +*.bak-* +tmp/fix_*.py +tmp/dup_scan*.py +tmp/bh_keep_chrome.py diff --git a/.workbuddy/.budget-alert-level b/.workbuddy/.budget-alert-level index f8ea104..ab3c0eb 100644 --- a/.workbuddy/.budget-alert-level +++ b/.workbuddy/.budget-alert-level @@ -1 +1 @@ -35069ba1-9d9c-42c6-a367-a1ec54fb7cee 3 \ No newline at end of file +184c4986-d8ec-447e-b1ed-96f568c99fb5 3 \ No newline at end of file diff --git a/.workbuddy/.skill-load-guard.state b/.workbuddy/.skill-load-guard.state index 9c8ca3e..4328ae0 100644 --- a/.workbuddy/.skill-load-guard.state +++ b/.workbuddy/.skill-load-guard.state @@ -1 +1 @@ -8b37a612-a130-4237-b8da-42325feeac08 1791404784.303 +184c4986-d8ec-447e-b1ed-96f568c99fb5 1791467635.191 diff --git a/.workbuddy/collab/collabctl.py b/.workbuddy/collab/collabctl.py index 7e98666..e257007 100644 --- a/.workbuddy/collab/collabctl.py +++ b/.workbuddy/collab/collabctl.py @@ -67,7 +67,7 @@ HB_FRESH_S = 90 # 🔴 心跳新鲜阈值(与 `collabd.supervise_aliv WORKSPACES = [ "E:/ProgramData/AIProject/ai1net-dsh-server", "E:/ProgramData/AIProject/vibe-product", - "E:/ProgramData/AIProject/content_marketing_agent", + "E:/ProgramData/AIProject/contentm_agent", ] # 看板:全局只一条(⛔ 不是每区一条) @@ -84,7 +84,7 @@ BOARD_PORT = 20099 KEEPALIVE_TASKS = { # 新形态:计划任务 → pythonw collabd.py --supervise "E:/ProgramData/AIProject/ai1net-dsh-server": "collabd-keepalive-ai1net-dsh-server", "E:/ProgramData/AIProject/vibe-product": "collabd-keepalive-vibe-product", - "E:/ProgramData/AIProject/content_marketing_agent": "collabd-keepalive-content_marketing_agent", + "E:/ProgramData/AIProject/contentm_agent": "collabd-keepalive-contentm_agent", } BOARD_TASK = "dsh-board-keepalive" @@ -319,6 +319,11 @@ def kill_all(): if pid and _pid_alive(pid) and pid not in protect: if _kill_pid(pid): n += 1 + if ONLY_WS: + # 🔴 收敛模式(`--ws`):只杀本区心跳里记的那个 pid,⛔ 不做全机扫描。 + # 2026-10-08 实测事故:全机扫描会连别的区与看板的进程一起杀 + # (`off --ws contentm_agent` 一次杀掉 5 个进程,其中 3 个属他区/看板)。 + return n for nm, pid, cl in list_procs(): try: ipid = int(pid) @@ -516,8 +521,10 @@ def cmd_off(): set_switch(ws, "off") _p(" 开关 off:%s" % ws) disable_tasks() - _p(" 计划任务已禁用:%d 个(新 %d + 旧 %d + 看板 1)" - % (len(SCHED_TASKS) + len(KEEPALIVE_TASKS) + 1, len(KEEPALIVE_TASKS), len(SCHED_TASKS))) + _nb = 0 if ONLY_WS else 1 + _p(" 计划任务已禁用:新 %d + 旧 %d + 看板 %d(%s)" + % (len(KEEPALIVE_TASKS), len(SCHED_TASKS), _nb, + "收敛到单区 ⇒ ⛔ 不碰看板" if ONLY_WS else "全区")) n = kill_all() _p(" 已杀进程:%d 个" % n) _p("✅ 全停完成(可反复跑,幂等)") diff --git a/.workbuddy/collab/collabd.config.json b/.workbuddy/collab/collabd.config.json index 7552383..f2eaf31 100644 --- a/.workbuddy/collab/collabd.config.json +++ b/.workbuddy/collab/collabd.config.json @@ -1,7 +1,8 @@ { - "_说明": "本文件 = content_marketing_agent 工作区的协作机制部署配置(⛔ 不属于技能)。技能里 collabd.py 是通用代码,靠环境变量 COLLABD_CONFIG 指向本文件;不指 ⇒ 才回落到技能目录里的 collabd.config.example.json(范例,⛔ 不是生产配置)。", + "_说明": "本文件 = contentm_agent 工作区的协作机制部署配置(⛔ 不属于技能)。技能里 collabd.py 是通用代码,靠环境变量 COLLABD_CONFIG 指向本文件;不指 ⇒ 才回落到技能目录里的 collabd.config.example.json(范例,⛔ 不是生产配置)。", "_改名说明": "🔴 2026-10-07 本工作区由 agent-product 改名而来。本文件原先 workspace 与 targets 键都还写着旧名 agent-product ⇒ 已改回本名。⛔ 不改的后果:常驻会把台账/目标写到已不存在的目录。", - "workspace": "E:/ProgramData/AIProject/content_marketing_agent", + "_改名说明20261008": "🔴 2026-10-08 二次改名:目录 content_marketing_agent ⇒ contentm_agent,而本文件 workspace 仍写旧名 ⇒ 常驻把心跳/台账/日志全写进已不存在的旧目录(实测 pid 56368、argv0 指向技能源那份 collabd.py)。本轮把 workspace 改成现名;同时 collabctl.py 的 WORKSPACES/KEEPALIVE_TASKS 两份清单(源 + 三个区副本)一并改为现名。", + "workspace": "E:/ProgramData/AIProject/contentm_agent", "inbox": "tmp/supervise-inbox", "live": "交付物/本机协作-实时状态.md", "taskgraph": "", diff --git a/.workbuddy/collab/supervise.switch b/.workbuddy/collab/supervise.switch index e8fd903..b5a9a3b 100644 --- a/.workbuddy/collab/supervise.switch +++ b/.workbuddy/collab/supervise.switch @@ -1 +1 @@ -on \ No newline at end of file +off \ No newline at end of file diff --git a/.workbuddy/memory/2026-10-08.md b/.workbuddy/memory/2026-10-08.md index dfc6db3..7e87275 100644 --- a/.workbuddy/memory/2026-10-08.md +++ b/.workbuddy/memory/2026-10-08.md @@ -1,293 +1,875 @@ -# 2026-10-08 工作日志 - -## 00:2x · 目标检查会话 第 11 棒(自动化 6ff7e206) - -- 目标「重写 5 份竞品分析文档并重新生成 MCN 短视频整合营销需求文档」:**判定未完成**。 -- 台账 `tmp/supervise-inbox/tasks.json` 10 条全 `done`、队列空、无僵尸件;`taskgraph.json` 不存在;`goal.json.acceptance_state` 7 条 = 5 过 / 2 不过(判据 5 技能包说人话、判据 6 vibe-product 六份),与 `目标执行状态.md` 逐条一致。 -- L3 现测坐实「落地未做」:全局技能目录 16 份目标文件 mtime 20:23~21:53 < 新稿 23:01–23:08;vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31。 -- 处置:未派棒、未改 lifecycle、未改 acceptance_state、未跑 `--ensure-goal-dir`(本区 `roles = {}`)。 -- 判定书已写入 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/目标执行状态.md`(新增「第 11 棒」节,原第 10 棒节改标「上一棒判定」)。 -- 输入缺失(记账):派活原文指定先读的 `state.py`、`tmp/supervise-inbox/taskgraph.json` 在本区均不存在。 -- 机制侧观察:同一目标已连建 11 棒检查会话,第 8~11 棒结论完全相同(残 2 条跨边界落地、机制侧不可达)⇒ 存在重复空跑;未动代码。 - -## 00:50 · 目标检查会话 第 12 棒(自动化 8da8ec4c) - -- 同一目标:**判定仍未完成**,与第 8~11 棒逐条相同(台账 10 条全 `done`、`taskgraph.json` 不存在、判据 5 过 / 2 不过)。 -- L3 现测复核(00:50):判据 5 落点 `product-planning/` 五份 SKILL.md mtime 01:20/20:23/21:29/21:45/21:53 < 新稿 16 份 23:02–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31 ⇒ 两处落地确实未做。 -- 处置:未派棒(残项唯一剩余动作是域外/跨区写入,本区任务会话域门禁写不了;落地步骤已完整在 `NEED-USER.md` 第 2/3 条)、未改 lifecycle(保持「进行中」)、未改 acceptance_state(值域已规范,无字可改)、未跑 `--ensure-goal-dir`(`roles = {}`)。 -- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 12 棒」节,原第 11 棒节改标「上一棒判定 · 历史」)。 -- 待用户拍板:①「全量」口径 16/19/83;② 检查会话连棒阈值是否收窄(已连 12 棒重复空跑);③ 两条跨边界落地由谁执行(主会话/用户)。 - -## 01:20 · 目标检查会话 第 13 棒(自动化 3a88f456) - -- 同一目标:**判定仍未完成**,与第 8~12 棒逐条相同。机器侧现取 `--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 2.3 分钟|会话全结束|已建检查会话 = 13 棒`。 -- L3 现测复核(01:20):判据 5 落点 `product-planning/` 四份 SKILL.md mtime 10-07 01:20/20:23/21:29/21:53 < 新稿 16 份 23:02–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47(research 4 份/prd 2 份)< 新稿 23:29–23:31 ⇒ 两处落地确实未做。 -- `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅。 -- 处置:未派棒、未改 lifecycle、未改 acceptance_state(值域已规范)、未跑 `--ensure-goal-dir`(`roles = {}`)、未动代码。 -- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 13 棒」节,原第 12 棒节改标「上一棒判定 · 历史」)。 -- 机制侧:连建 13 棒、第 8–13 棒结论完全相同 ⇒ 只要 lifecycle 仍「进行中」且队列空,常驻会继续建第 14 棒,残项机制侧不可达 ⇒ 持续空跑,收口须用户定。 - -## 01:50 · 目标检查会话 第 14 棒(自动化 1baf3a23) - -- 同一目标:**判定仍未完成**,与第 8~13 棒逐条相同。机器侧现取 `--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 2.4 分钟|会话全结束|已建检查会话 = 14 棒`;`check-agent.json` 记 `round=14 / reason=queue-empty / idle_min=26.9`。 -- 三路核对:台账 10 条全 `done`(无 pending/running/blocked ⇒ 无僵尸件);`taskgraph.json` 不存在;`goal.json.acceptance_state` 7 条 = 5 过 / 2 不过(判据 5 技能包说人话、判据 6 vibe-product 六份)—— 与 `目标执行状态.md` 逐条一致,值域已规范 ⇒ 无字可改。 -- L3 现测复核(01:5x):判据 5 落点 `product-planning/` 五份 SKILL.md mtime 01:20/20:23/21:29/21:45/21:53 < 新稿 16 份 23:01–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31 ⇒ 两处落地确实未做(读数与前 3 棒相同,无变化)。 -- `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅;本目标域目录 `执行会话/` 空闲。 -- 处置:未派棒(残项唯一剩余动作是域外/跨区写入 `E:/ProgramData/.workbuddy/skills/product-planning/` 与 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`,本区任务会话域门禁写不了 ⇒ 派了必撞门禁;落地步骤已完整在 `NEED-USER.md` 第 2/3 条 ⇒ 无新增可派内容)、未改 lifecycle(保持「进行中」)、未改 acceptance_state、未跑 `--ensure-goal-dir`(`roles = {}`)、未动代码与常驻。 -- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 14 棒」节,原第 13 棒节改标「上一棒判定 · 历史」)。 -- 机制侧:连建 14 棒、第 8–14 棒结论完全相同 ⇒ 持续空跑,收口(收窄连棒阈值/用户结束目标)须用户定,超出本轮范围。 -- 待用户拍板(已连提 7 棒):①「全量」口径 16/19/83;② 连棒阈值是否收窄;③ 两条跨边界落地由谁执行。 - -## 02:1x–02:2x · 主会话:换目标后开工与派活(MCN 产品界面) - -开工四查(全部现取,非快照): -- 常驻在位:pid 71532,心跳 02:16:18,`round=12`,`argv0` 指向本区 `.workbuddy/collab/collabd.py`(旧目标收口后机制自己重新拉起的)。 -- 目标=「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」,`lifecycle` 进行中,判据 5 条全「未过」。 -- 台账 10 条全 `done`(旧目标遗留,非欠项);域锁在册 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致;`--domain-check 执行会话` = ✅ 可派|域空闲。 - -🔴 用户两条口径纠正(已直接落进派活 prompt): - -1. 「第三部分为什么是 open design,选择了 oil-ui-pro,应该不需要使用 open-design」⇒ **本次③段全程不引用 open-design**。 - 核实读数:全局技能根 15 个技能**无** open-design;本工作区 `.workbuddy/skills/` 只有 `aigc-idea-impression`;open-design 只存在于 vibe-product(`vibe-product/.workbuddy/skills/open-design`、`vibe-product/open-design`、`vibe-product/技能库/open-design`)⇒ **本工作区本来就不可得**。 - ③段技能文档那句「本段默认主线」是 2026-10-02 定的**全局通则**(`references/stage-delivery/SKILL.md` 第 3/21/25 行),**不动**;本项目口径= `oil-ui-pro`(方法+独立评审)+ `tiaoyue`(定调/令牌/组件)+ 本段自家两份(`references/layouts-tooling.md` 18,797 B、`references/execution-runbook.md` 39 KB)。 - ⭐ 工具型页面的版式技能文档本就规定走自家 `layouts-tooling.md`(第 94/312 行),**不算回落**;真缺口只有 open-design 的 `craft/` 13 份工艺数值判据 ⇒ **本次无来源,⛔ 不编**。 -2. 「应该要先完成 1 2步 在进行第3步」⇒ **①②段先于③段**。 - -现场核对(1a 到底是什么): -- `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md` 是**汇总型**需求(8 场景 S1–S8/14 功能 F1–F14/假设 A1–A4/风险 R1–R4/9 条待复核),**非** grill 澄清产出。 -- 项目目录只有这一份 ⇒ ①段 1c 画像/1d 策略/1e 场景**未成文**(1a 的 §三/§四/§五 只是草案);1b 竞品在 `content-workbench` 项目下已有,可跨项目引用;②段 `prd/` **整目录不存在**。 -- ⚠️ 摘要里记的 `设计说明.md` **不存在**(工作区根与全盘 find 均无)⇒ 不按它推进。 - -派活:新建一次性排期 `[执行]-[开源项目调研]-MCN产品①②段补齐`(id `844f5231`,02:26 触发,cwds 本区)。 -任务=按①段判据把 1c/1d/1e 三份**成文**(⛔ 不许把 1a 草稿原样复制充数)+ 按②段判据出「功能清单」与「界面布局」两份;⛔ 本轮不做③段。 -域目录 `执行会话`;落点 `执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/`(目录尚未创建,由该会话建;`collabd.goal_dir_name()` 实测名,⛔ 不改)。正式归档路径 `docs/pm/mcn-shortvideo-agent/` 在域外 ⇒ 本轮不写,收口后由主会话搬。 -⚠️ prompt 里 bash 写成显式路径 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`(本机裸 `bash` 会落到 WSL、路径被吃 —— 既有实测)。 - -有意未做:未改 `goal.json` 判据(目标本身没变、仍是③段;①②由棒次次序约束);未改③段技能文档里「默认主线」那句(全局通则)。 - -## 02:2x–02:4x · 用户令:③段默认主线由 open-design 改成 oil-ui-pro - -用户原话:「③段技能文档 stage-delivery/SKILL.md 第 3/21/25 行把它写成「本段默认主线」,默认改为 oil-ui-pro」⇒ **本日志上一节最后那条「未改技能文档默认主线」的记录到此作废**。 - -改动范围(三份文件,共 17 处): - -- `E:/ProgramData/.workbuddy/skills/product-planning/references/stage-delivery/SKILL.md`(12 处):frontmatter description;供给表三行(`oil-ui-pro` 升为「默认主线」、自带样式库升为「默认定调来源」、`open-design` 降为「可选补强,装了才有」);⭐ 说明句;line 30 加统一读法;「不可得时的回落」整块改写成「默认主线不靠它」;子步表 3a/3d 两行;必读表改成三列(环节/读什么/供给);定调来源两处候选换序(自带库首选);3a 第 0 步供给核对;D1 定调;3b 构建六步;`tooling.md` 分工;Gate-1 供给核对项;硬约束「供给默认是 open-design」。 -- `E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md`(5 处):选型表「设计规范文件」行、「审美方向/风格定调」行、「多方向比选/独立评审打分」行;供给两段说明;「多数页面走 open-design 主线」句。 -- `E:/ProgramData/.workbuddy/skills/product-planning/references/stage-delivery/references/execution-runbook.md`(5 处):供给声明;声明制「主干与挡位」示例;必读分工;§1 加统一读法;「定调来源唯一」改自带库首选。 - -统一读法(三份各写一次,口径一致):凡出现 `open-design/...` 路径,一律按「该工作区装了 open-design 才有」读;没装就按默认主线走(`oil-ui-pro` 方法 + 自带样式库定调 + 本段自家 `execution-runbook.md` 与 `layouts-tooling.md` 判据),craft 独有的那几项(反 AI 味/无障碍/表单校验/动效纪律)明说「本次无供给来源」,⛔ 不编。 - -核对读数: - -- 加粗 `**` 计数与改前**逐份一致**(9 / 0 / 0)⇒ 没把「说人话」那轮清掉的加粗又带回来。 -- 命名闸门 `check_naming.py --root <技能包>`:连跑 **14 次**,全部 `通过 46 | 失败 0 | 提示 4`;4 条提示都是 `_留痕/` 与废止说明里的旧词,正当。 -- ⚠️ **闸门首跑出现 `通过 45 | 失败 1`**,失败行被 `tail -20` 截掉、未留证;此后 14 次连跑全部 0 失败 ⇒ 判为**一次性读盘毛刺、未能复现**,未改判据。后续再出现须把完整输出落盘再读。 -- 备份:`归档/③段默认主线改oil-ui-pro前-20261008/`(三份原文件)。改前 md5:`61b8e4a8…`(SKILL.md)/`ed755968…`(stage-delivery/SKILL.md)/`9df4175e…`(execution-runbook.md)。 - -## 02:3x · 🔴 撞车事件:另一个会话把 open-design 随段携带,两会话并发改同一批全局技能文件 - -用户问「是修改的全局技能吗」,核实过程中发现**同一批文件在我改完之后又被写了**(`stage-delivery/SKILL.md` 02:27 48,254→48,330 B;`execution-runbook.md` 02:28 39,752→39,858 B;`layouts-tooling.md` 02:28 18,797→18,811 B)。用户当场确认:「是另一个会话改的,把 open-design 当成可选技能」。 - -那个会话做了什么: - -- 把 open-design **整棵拷进技能包**:`<全局技能包>/references/stage-delivery/assets/open-design/`,**64 MB / 4177 个文件**(源:`nexu-io/open-design@0.23.1`,Apache-2.0,本地裁剪版,版本标记 `0.23.1-crop1`;体量与 `vibe-product/.workbuddy/skills/open-design` 的 64M 吻合)。 -- 把引用口径从**技能名**改成**段内相对路径** `assets/open-design/...`,并把它的定位改成「独立技能 · 可选择使用」。 -- 它的改动与我的改动**叠在同一份文件上、彼此不冲突**:我的「默认主线 = oil-ui-pro」三条句子全部还在(第 3/17/21/25 行等),它的路径改写也在。 - -我做的对齐(13 处): - -- 🔴 发现并修掉**残留矛盾**:它只改了部分路径,导致 13 处仍写着「装了才有/工作区装了/没装/外部供给」—— 而该件现已随段携带、恒在,「装了才有」全错。改法是统一成「**选了它才用(本段自带)**」:总入口 `SKILL.md` 4 处(95/98/101/103)、`stage-delivery/SKILL.md` 5 处(118/120/122/194/197)、`execution-runbook.md` 4 处(6/38/67/79)。 -- `execution-runbook.md:79` 的立论也改了:原写「`open-design` 是外部供给,会被上游更新」⇒ 现为随段携带的本地裁剪版,**上游更新不会自动跟进来**(供给核对的理由随之变化)。 -- 新增 `assets/open-design/ATTRIBUTION.md`:登记来源仓库/版本/许可(Apache-2.0)/裁剪方式/使用口径(默认主线是 oil-ui-pro,本件只作补强)。 -- 🔴 **合规缺口(记账)**:该目录**未随附 Apache-2.0 的 LICENSE 全文**,也没有上游 NOTICE(`find -iname "*license*/*notice*/*attribution*"` 为空)。已写进 ATTRIBUTION.md 并在回复里提报。 - -复核读数: - -- 残留口径 grep:仅剩 `stage-delivery/SKILL.md:48` 一处含「装了」字样,是**否定句**(「不再依赖『工作区级装没装』」)⇒ 正当,已对齐。 -- 命名闸门连跑 3 次:`通过 46 | 失败 0 | 提示 4`。 -- 三份当前:`SKILL.md` 27,317 B / `stage-delivery/SKILL.md` 48,400 B / `execution-runbook.md` 40,000 B。 - -🔴 **闸门首跑 45/1 的根因(结论订正)**:此前记的「一次性读盘毛刺」**证据不足**,实际最可能的原因是**并发写者** —— 我跑闸门的那一刻,另一个会话正在改同两份文件,读到半更新态。判据:那两份文件的 mtime(02:27/02:28)正落在我连跑闸门的窗口内;`check_naming.py` 经 grep 确认**无任何写盘动作**(已排除「脚本自己改文件」)。⇒ 纪律:全局技能包存在多会话并发写,改前先看 mtime、改后必复跑闸门。 - -另:①②段那一棒(自动化 `844f5231`,02:26 触发)**已在跑**:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/` 下 `research`/`prd` 两个子目录已建。 - -## 02:2x · 目标检查会话 第 15 棒(自动化 `788c4126`,只做「核对目标完成状态」) - -- **判定:目标未完成**(换目标后零产出)。三路并集:① 台账 `tasks.json` 10 条全 `done`,但 `goal_fp` 全为 `5199a6`/`72111e` ⇒ **当前目标 `d85687` 零记录**;② `taskgraph.json` 本区不存在 ⇒ 此路无数据;③ `goal.json.acceptance_state` 5 条全 `未过`(不在白名单 ⇒ fail-closed ⇒ 未过)。 -- 现场:当前目标(标题「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」)于 **02:15 换目标**时声明;目录短哈希 `d85687` 与 `sha1(标题)[:6]` 实测一致;`执行会话/` 下只有 `5199a6`/`72111e` ⇒ 当前目标目录与《目标执行状态.md》**均不存在** ⇒ 无法按文档逐条交叉核对验收结论。 -- 门禁/现场:`--domain-status` 在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅,本目标域 `执行会话` 空闲;常驻 pid 71532 心跳 02:19:58 `round=34`,`argv0` 指本区 ✅。 -- ⛔ **未派新棒**:在途已有 `[执行]-[开源项目调研]-MCN产品①②段补齐`(`844f5231`,`once` 02:26,`automations/844f5231-…/` 记忆目录不存在 ⇒ 尚未跑过)。理由三条:再派=双投;②段未成文前 ③段无从开工(用户 2026-10-08「先完成 1、2 步再第 3 步」);两条会争同一域锁。 -- ⛔ 未改 `lifecycle`(未完成)、未改 `acceptance_state`(无文档可依)、未跑 `--ensure-goal-dir`(`roles={}` ⇒ 会把检查会话登记成主会话;且目标目录按主会话口径「由该棒建」)、未动代码与常驻。 -- 记录在案(本轮不修,机制变更不许检查会话自作主张):① 本区**无 `state.py`/无 `taskgraph.json`**,而 prompt 第 1/3 项与 `collabd.py --gap` 提示词仍在引用 `state.py`;② `goal.json.execution_doc` 换目标时**未跟着换**,仍指旧目标 `5199a6/目标执行状态.md`(后续检查棒会读错判定书);③ `acceptance_state` 用了非规范值 `未过`(规范=`过|依据`/`🔴 不过|依据`);④ 本轮在**有在途执行棒**时仍被派发 —— 现场读数如实记下,**未读闸门代码、不臆断是否为缺陷**。 - ---- - -## 02:26–02:5x · 任务会话 `[执行]-[开源项目调研]-MCN产品①②段补齐`(sid `fd655683`)· ✅ done - -**目标**:把 MCN 短视频整合营销工作台的①②段产出补齐(③段本轮不做,用户口径「先完成 1 2步 在进行第3步」)。 - -**落盘**(全在目标目录 `执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/`,约 123 KB): -- `research/`:`1a-需求文档.md`(逐字复制件+落本目录说明)|`1b-竞品分析.md`(**跨项目引用登记**,不重写本体)|`1c-用户画像.md`(3 画像)|`1d-产品策略.md`(九节画布+5 条关键假设)|`1e-使用场景.md`(8 条用户故事) -- `prd/`:`2a-产品功能.md`(14 条功能六字段+不做清单对照+六项治理在条目内)|`2b-界面布局.md`(八页骨架) -- `目标执行状态.md` - -**①段就位判定**:1a ✅(汇总型)/1b ✅ 跨项目⇒引用即可/1c·1d·1e 🔴 缺 ⇒ 本轮按各自方法论成文(⛔ 未把 1a 草案复制充数)。 - -**②段骨架(③段的直接依据,已冻结)**:八页 = P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台|P8 记录与对账;一级导航三组照 1a §八 的三个入口,P6 跨组;页型判为**工具型页面**。 - -**本轮守住的几条**:① 1a 的 9 条待复核与 A1–A4 **一条未当事实用**,`2a` §三 逐条标了「依赖哪条/不成立会怎样」,9 条全落「待实现且已排定确认时机」;② 文首写「上游状态」(1b 重写与复核已完成:9 条 2 改 7 不改;引用处标证据等级);③ 说人话自评 7 份逐份给分(46–47/50,门槛 45)。 - -**两处现场更正(供机制记账)**: -- 🔴 派活原文给的 1b 路径 `docs/pm/content-workbench/research/1b-竞品分析.md` **在本工作区不存在**(`docs/pm/` 下只有 `mcn-shortvideo-agent/research/1a-需求文档.md`)。真落点在 `执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/`。 -- 🔴 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md` 是**旧版**(上游状态行停在「正在重写、9 条待复核」),与 72111e 那份内容不同。 - -**悬空项(未编答案)**:投放这段没有场景(1a 待复核第 8 条);机构负责人角色在 1a 里悬空(S7 用了、§四 没列);1c 是零访谈画像(已在文首明说)。 - -**机制侧(未处置)**:`goal.json.execution_doc` 仍指旧目标 `…-5199a6/目标执行状态.md`(需 main 席位跑 `--ensure-goal-dir`);本目标连建 15 棒检查会话、第 8–14 棒结论相同;`acceptance_state` 5 条③段判据里「页面骨架来源已写明(②段缺失时标假设)」的前提升口已不成立(②段已补齐)⇒ 措辞可能要主会话顺手调。 - -**上报**:`--report fd655683… --state done --artifact "…/目标执行状态.md"` ⇒ OK;域锁 `--release-exec` 已释放。域外归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 留给主会话。 - ---- - -## 02:3x–02:5x · 主会话:A 方案落地 —— ③段供给链从「散布复述」收敛为「单一可信源」 - -**缘起**:用户问「默认主线改成 oil-ui-pro 这一个设定为什么要改这么多地方 是不是 本身就是问题」⇒ 诊断结论是**复述式写法**:③段的供给关系被复述约 40 处,改一次必然漏(实测漏 13 处)。用户令「按照建议处理」⇒ 执行 A(立权威供给块,其余引用);B(机器可读清单+校验脚本)作下一层加固,C(反查护栏)只当临时护栏,本轮均未做。 - -**A 方案落盘(本轮,`<全局技能包>/product-planning/` 下 5 份文件)**: -- `references/stage-delivery/SKILL.md`(**权威块所在**,现 46,xxx B): - - §供给 块(17 行起)已含 6 行表:方法主线|定调与令牌|版式骨架|工艺数值判据|独立评审协议|多方向比选,每行给「默认来源 | 可选来源 | 管什么 | 用在哪」。 - - 本轮**新增边界句**(防边界含糊):本块管「有哪几档、谁默认、路径从哪个根起」;各档**内部**具体篇目(如可选档工艺判据下某一篇)属执行细节,留在 runbook 各步里,**不算复述**。 - - 规则句示例行名订正:`§供给·定调档` → `§供给·定调与令牌`(取表左列真名)。 - - 正文 9 处复述点改引用:frontmatter description、禁令查询(`craft/` 篇目列表 → §供给)、一条例外(「craft 里没有」→「供给件里没有」)、限载 ×2(去掉「153 套 / 13 份」计数)、续加新风格(「与 `open-design` 同形」→「与可选档同形」)、第 0 步供给核对(三处路径 → 「可选来源那三处,见 §供给 表」)、D1 怎么选(去 153)、D1 套内读法(「`open-design` 那档」→「可选档那套」)。 -- 总入口 `SKILL.md`(27,xxx B): - - 选型表 4 行改引用(评审原型页/设计规范文件/审美定调/多方向比选)。 - - 正文 6 处:101 整段重写为「六档只在③段 §供给 定义一次,本入口不复述」;103「不与可选档缝成流水线」;105「两个技能」→「供给件」;107 页型分流改引 §供给·版式骨架;109「`stage-delivery` 与 `craft`」→「默认档与可选档」;111 对比度判据改引 §供给·工艺数值判据。 - - 另修 2 处陈旧口径:122「不需要 open-design daemon 在场」→「不需要任何外部服务在场」;215 反面清单「两个页面设计技能(`open-design` / `oil-ui-pro`)」→「供给件(③段自带 `oil-ui-pro` + §供给 各档落在 `assets/` 下的件)」。 -- `references/stage-delivery/references/layouts-tooling.md`(18,xxx B):第 3 行硬路径 → §供给·版式骨架 可选档;第 234 行同;第 238 行「`craft/animation-discipline.md`」→ §供给·工艺数值判据 动效那一份。 -- `scripts/check_naming.py`:第 6 行注释「判据归 `open-design/craft/`」→「归③段 §供给·工艺数值判据」。 - -**核对读数(全绿)**: -- 加粗 `**` 计数逐份**与基线完全相等**:`9 / 14 / 2 / 22 / 48`(改前改后同)。中途一次手滑给 §供给 边界句加了 `**内部**`(+2),当场改回。 -- 闸门:`通过 46 | 失败 0 | 提示 4`。 -- 引用行名与表左列**全对**(11 个去重形态里,除带尾随上下文的截断外,无一别名)。 -- 残留 `open-design` / `craft/` 提及经逐条归类后**全部正当**:`assets/design-capture/*` 与 `assets/design-systems/design-system-tiaoyue/*` 是**逐字搬入的第三方件**(纪律:不改供应商件内容);`_留痕/` 是历史留痕;③段 `SKILL.md` 第 374 行是**修订记录**(dated changelog,记 2026-10-02 那次重接)。 - -**⚠️ 闸门调用有个坑(记账)**:只给 `--root .` 会 FAIL —— 脚本要靠 `--ws` 找「含 `docs/pm` 的那一层」来跑产出白名单检查,缺了就报 `[FAIL] 找得到工作区`。**正确调用**: -`python scripts/check_naming.py --root . --ws "E:/ProgramData/AIProject/content_marketing_agent"` ⇒ 46/0/4。 - -**未做 / 待办(可推翻)**: -- **B 方案**:`assets/supply.json` 机器可读清单 + 校验脚本查「还有没有复述」——未开工。 -- **C 方案**:反查脚本(发现复述即报)——未开工。 -- **runbook 里约 30 处 `craft/xxx.md` 步级篇目引用保留没动**:判定为「档内执行细节」(§供给 已把这条边界写成显式规则),不构成「谁是默认 / 路径在哪」的复述。若认为应一并收敛,说一声即可推翻。 -- 待拍板三项(技能包遗留):全量口径 16/19/83;`product-strategy.md` 与 `user-personas.md` 英文模板被整段译中;7 份方法论文末新补《输出检查》章节。 - ---- - -## 02:4x–03:0x · 用户令「排查产品规划技能中是否还有类似问题一并处理,然后在全面检查一遍」 - -**做法**:先 read-only 摸结构(18 份 md / 无 assets 时 3430 行)→ 写**复述检测器**按「跨文件最大重复簇」聚合(`tmp/dup_scan2.py`,163–164 簇)→ 逐簇判定「会变的事实 vs 正当留痕」→ 收敛 + 修漂移 → 把判据**脚本化** → 变异对照自检。 - -**一、修掉 2 个真漂移(不是复述,是事实已经打架)** -1. 🔴 **停线规则三段 vs 一段对不上**:`stage-delivery` / `stage-discovery` / `stage-proto-doc` 都写「只有**三种**情况停」,`stage-requirements` 写「**四种**」,总入口 §执行规则 写的是**四条**(多一条「①段末的方案确认」)。⇒ 四段一律改成「停线规则见 `product-planning` 的「执行规则」,⛔ 本段不复述」,口径收归总入口。 -2. 🔴 **旧产物路径残留 4 处**:`usage-scenario.md` 的产出声明还写 `strategy/31-使用场景.md`;`stage-proto-doc/SKILL.md` 输入表还写 `strategy/30-产品策略.md`;总入口「产物落哪」表与「②③只读」清单还列着已废的 `ux/`、`ux/diagrams/`、`ux/state-machine.md`。⇒ 全部改成现行 `research/1a~1e`、`prd/`。 - -**二、⚠️ 闸门自己有 bug,把这类病静默藏住了(本轮最大发现)** -- `check_naming.py` 的 `DEPRECATED` 提示循环**用一个 stale 变量 `t`**(该用本轮读到的 `tt`):它前面先跑了一个**空循环**只赋值 `t`、什么都不做,紧接着的 `if old in t` 就永远在检查「上一个循环最后一个文件」。⇒ **旧名提示恒不触发**,上面那 4 处旧路径一处都没报出来(提示数当时只有 4,修好后 25–29)。 -- 另新增 **`DEAD_PATHS` 检查(FAIL 级,不只是提示)**:`strategy/`、`ux/` 这类已废目录形态出现在正文的产出/只读/必读位置即报红;行内含「旧/已废/已改名/曾/历史上/移进/移到/改为/废止/原」等废止标记时豁免(那是正当留痕)。 -- 修好后首跑即报出那 4 处,正是上面第一条要修的。 - -**三、收敛复述(会变的事实 → 单一定义 + 其余引用),权威落点** -- **②—③ 边界**(跨 5 文件 ~19 处)⇒ 权威=**②段 `SKILL.md` 的 §②—③ 交接口**(新立唯一权威块,含两侧逐行对照 + 用户原话唯一出处)。③段那张平行表删除;总入口、①段、runbook、create-prd、②段自身 4 处完成标准/反面清单全部改引用。 -- **可选档骨架名单(营销页向那 8 个)**(10 处 / 4 文件)⇒ 权威=`layouts-tooling.md` 开头(名单 + 为什么工具型不能套,只写一次);§供给·版式骨架 只登记结论。 -- **「说人话」门槛数值**(6 处)⇒ 权威=总入口 §执行规则 内容准则条;各段只留「已过内容准则,评分 X/50」的留证要求。 -- **对比度门槛数值**(3 处)⇒ 权威=runbook 的数值判据段(只登记一次)。 -- **设计契约十二字段的展开清单** ⇒ 权威=runbook §2.1;③段原本把它又铺了一遍,改为引用。 -- **②—③ 定案用户原话**(6 处)⇒ 只在②段 §②—③交接口 出现一次。 -- **1b 两体例的定案原话**(6 处)⇒ 只在 `competitor-analysis.md` 出现一次。 -- **grill-me 的 A / B 节火力点**(4 处)⇒ 只在 `grill-me.md` 定义。 - -**四、把「单一可信源」做成机器可查(原 B/C 方案的正身)** -- `check_naming.py` 新增 **`AUTHORITY` 登记表 + 检查**:每条 = 「一个会变的事实 → 唯一定义处 → 禁止复述的正则」。除定义处外任何 md(排除 `归档/`、`_留痕/`、`assets/`、`_superseded*`、含废止标记的行)出现该模式即 **FAIL**。当前 **9 条**全绿: - ②③边界 | 停线规则(`authority: None` = 全包禁写)| 可选档骨架名单 | 说人话门槛 | 对比度数值 | 契约字段展开 | ②③定案原话 | 1b 定案原话 | A/B 节火力点。 -- **变异对照(用户硬要求)**:向 `stage-proto-doc/SKILL.md` 注入一条含 4 类复述的探针行 ⇒ **4 个 FAIL 全部命中**(停线规则/骨架名单/对比度/悬空旧路径);还原 ⇒ 全绿。**判据不是恒绿**。 -- ⚠️ 中途一次判据过宽:`归②段|归③段` 把「骨架归②段」这类正常行文也算成复述 ⇒ 收紧成只匹配**表头形态** `归②段(…)| 归③段(…)`,并加留痕豁免。 - -**五、顺带查出的 2 处真残留(HINT 修好后浮出来)** -- `grill-me.md` 第 69 行还写着「在 **1c 产品定位与场景** 里不得当作事实使用」——`1c 产品定位与场景` 是**已废子步名**,现行是 1d 产品策略 / 1e 使用场景。⇒ 改为「1d 产品策略与 1e 使用场景」。 -- `usage-scenario.md` 第 88 行引用 `11-竞品分析.md` ——**已废产出名**,现行 `1b-竞品分析.md`。⇒ 改。 - -**六、读数(全绿)** -- 闸门:`通过 2059 | 失败 0 | 提示 25`(提示里 13 条在 `_留痕/`,其余 11 条逐条确认为**正当废止说明/历史事故记录**)。 -- 加粗 `**` 计数逐份**回到上轮基线**:`9 / 14 / 2 / 22 / 48`(本轮新写的强调句已全部压平)。 -- 脚本 `py_compile` 通过。 -- 复述簇总数 164 → 159(剩下的多是 frontmatter description、模板文件头声明、URL 清单这类**正当重复**,以及「统一引用句式」这种**看起来像重复、其实是引用**的)。 - -**有意保留(可推翻)**:各段 `SKILL.md` frontmatter description 里的段名/子步名(路由必需,属「同一事实的多入口声明」而非复述);每份 `references/*.md` 开头的「本文件是 xx 的方法论文档」模板句;`stage-discovery` 的反面清单里仍保留「1b 只交汇总体」等价条目(短句,是 1b 自己的反面清单)。 - ---- - -## 02:5x 目标检查会话 · 第 16 棒(automation a67efdc7) - -**判定:目标「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」= 🔴 未完成。** - -依据(三路取并集): -- 台账 `tasks.json` 11 条**全 done**、无 `running` 僵尸件;`collabd-state.json` 的 `queue_info`= pending 0 / running 0 / blocked 0 ⇒ 队列空。 -- 任务图:`tmp/supervise-inbox/taskgraph.json` **全工作区搜不到**(本轮该路无判据)。 -- `goal.json.acceptance_state` 5 条**全「未过」**,且全是**③段判据**(DESIGN.md 契约与令牌表/原型 HTML 可点通/tiaoyue+oil-ui-pro/页面骨架来源/产物落点)。 -- 目标执行状态文档 `…-d85687/目标执行状态.md` §D 自述:本轮做的①②段**不在这 5 条判据范围内**,③段**未开工**。⇒ 文档与 goal.json 一致,**无需写回**。 - -处置:建 1 条 `once` 执行棒 —— `[执行]-[开源项目调研]-MCN工作台③段界面交互`,id `34ab0198-d0fa-4e9d-978b-6c7f40a2978a`,`scheduledAt=2026-10-08T03:00`,`cwds=E:/ProgramData/AIProject/content_marketing_agent`(**正斜杠**,与既有 29 条排期同形)。域取 `执行会话`(`--domain-check` 判空闲可派;与上一棒 ①②段 同一域、且该域的写边界正好罩住目标目录,避免「产物落点」与「域门禁」互相打架)。⛔ 未改 `lifecycle`(保持「进行中」)—— 没做完不许标完成。 - -**四处理场缺口(照实记)** -1. 派活原文第 1 项 `state.py` **在本工作区根本不存在**(工作区根无此文件);第 3 项 `taskgraph.json` 同样不存在。 -2. `goal.json.execution_doc` 仍指**旧目标** `…-5199a6/目标执行状态.md`(登记于 2026-10-07 17:00)—— 旧账,修法只能由 main 席位跑 `--ensure-goal-dir`。 -3. `acceptance_state` 的值写作 `未过`,**不在规范取值域**(应为 `🔴 不过|…`);本轮**未改**(写回属"已完成"分支的活)。 -4. 技能里的「文档合同」写的是 `<目标目录>/目标执行状态.md` 由**目标检查会话**写,而本目标 14 棒检查会话都没写(含本棒)⇒ 合同与实况有差。 - -常驻在位:pid `34556`,心跳 age 3.2 s,`argv0` 指本区 `.workbuddy/collab/collabd.py`。 - ---- - -## 04:2x 目标检查会话 · 第 17 棒(automation d28817a0) - -**判定:目标「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」= ✅ 已完成。** - -依据(三路取并集): -- 台账 `tasks.json` 12 条**全 done**(新增第 12 条 `34ab0198`=③段界面交互,t_end 04:20),无 `running` 僵尸件 ⇒ 队列空(`check-agent.json` 的 `reason=queue-empty`、`queue_pending=0` 印证)。 -- 任务图:`taskgraph.json` **本工作区不存在**(该路无节点,⛔ 不是"未完成")。 -- `goal.json.acceptance_state` 5 条原本全 `未过`;目标执行状态文档 §10.3 **逐条给「✅ 过」**,与 goal.json **不一致** ⇒ 按规则**以文档为准**。 - -处置(本轮做的两件事): -1. `goalctl.py declare --kpi "…" --yes`(by=本会话)把 5 条判据写回规范写法 `过|依据`,**已回读 `goal.json` 确认**(5 条齐全、无 `;` 截断)。 -2. `collabd.py --set-life 已完成 --by "…"` ⇒ `进行中 → 已完成`;**常驻程序随之优雅退出**(pid 34556,因"目标已完成")—— 属设计行为,⛔ 不是故障。 - -**产物文件级取证**(不是只信文档):`…-d85687/ui/` 下 `DESIGN.md`(47.8 KB)、`mcn-workbench.html`(130 KB)、`3b-实测记录.md`、`3c-GPT会诊.md`、`3d-审查报告.md`、`_tools/`(3 脚本)、`_gate_shots/`(23 PNG) 全部在位;`prd/2b-界面布局.md`、`research/` 五份齐。 - -**四处照实记的缺口(本轮无权处置)** -1. 派活原文第 1 项 `state.py` **本工作区不存在**;第 3 项 `taskgraph.json` 同样不存在(与第 16 棒同)。 -2. `goal.json.execution_doc` 仍指**旧目标** `…-5199a6/目标执行状态.md` —— 未清;修法只能 main 席位跑 `--ensure-goal-dir`。 -3. 目标执行状态文档 §10.5 的 **B-15**(≤767px 一屏 <6 行,自检红)与 §10.7 的 6 条**人工确认项**(含假设 1/2)**仍悬空** —— 但**不在** `acceptance_state` 的 5 条之内 ⇒ 未据此判未过。 -4. 文档 §七.B 两项域外动作(搬 `docs/pm/mcn-shortvideo-agent/`、覆盖旧 1a)仍等主会话。 - -⛔ 本轮**未派活**(目标已完成),也未动域锁(`--domain-status` 显示仅 1 条在册域锁,属他区会话,与本目标无关)。 - -## 08:0x · 主会话:用户问「之前的目标完成了吗」—— 全量现场复核(L3 现测,非读文档) - -**结论:最新目标 d85687 ✅ 已完成;上一目标 72111e 的两条残项**现已全部落地**(此前 7 棒判定"未完成"的判据 5/6 已被后续动作消掉)。** - -**① 当前目标 d85687(MCN 界面)= ✅ 已完成**(L1+L3 双证) -- `goal.json`:`lifecycle = 已完成`(04:27:26,第 17 棒)/`acceptance_state` 5 条全为规范写法 `过|依据`(DESIGN.md 契约令牌/原型 HTML 81 项自检绿/tiaoyue+oil-ui-pro/骨架照 2b 八页 37 板块/落点可追溯)。 -- 文件级:`research/` 5 份(02:28–02:29,1a 24317/1b 7899/1c 16234/1d 17660/1e 15881)|`prd/` 2 份(02:30,2a 25958/2b 15036)|`ui/DESIGN.md` 47,835 B(04:16)|`ui/mcn-workbench.html` 130,371 B(04:10)|`3b` 22,659/`3c` 27,887/`3d` 25,080|`_gate_shots/` 23 PNG(04:12)|`_tools/` 3 脚本。 - -**② 上一目标 72111e 的两条残项 —— 已消除(本轮新取证,推翻第 8–14 棒的"未完成"读数)** -- **判据 6(vibe-product 六份)✅ 真落地**:`E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/` 下 research 4 份 + prd 2 份,**md5 与新稿逐字节全同**(1a `84965bc6…`/1c `57866674…`/1d `a17e249a…`/1e `27925667…`/2a `d32320b9…`/2b `af827824…`),mtime **02:10** > 新稿 23:29–23:31;字节数由旧 3034/3383/3121/… 变为 12063/9201/12991/… ⇒ 确系被覆盖,⛔ 不是空转。 -- **判据 5(技能包说人话 16 份)✅ 实质落地**:`归档/技能包-说人话-落地前-20261008/` 备份在位(02:09,SKILL.md 27,120 B)⇒ 覆盖动作做过。16 份中 6 份 md5 与新稿全同(competitor-analysis/product-strategy/user-personas/doc-area-spec/guided-tour/state-machine);另 10 份**差异全部是后续合法增量**(02:49–02:51 覆盖 + 02:3x–03:0x「A 方案单一可信源收敛」+ 排雷)—— diff 实证:`usage-scenario.md` 只差 2 行(`11-竞品分析.md`→`1b-竞品分析.md`、`strategy/31-使用场景.md`→`research/1e-使用场景.md`,正是排雷那两改)。落点 §供给 计数 stage-delivery 31/总入口 9/layouts-tooling 4 ⇒ A 方案确已进落点。 - -**③ 🔴 机制侧新发现:常驻空转循环(仍在发生)** -- 04:27:26 常驻因「目标已完成」优雅退出后,**保活计划任务仍每 5 分钟拉起一次**,进程启动 2 秒即因 `guard.stop` 退出 ⇒ `_collabd.log` 里 04:27:26–07:52:57 共 **43 次** `supervise loop start` → `守护已停 ⇒ 优雅退出`(末次 pid 70572,07:52:55→07:52:57)。 -- 心跳 `supervise-heartbeat.json` 停在 04:27:16(pid 34556,round 626)⇒ 与日志一致。 -- ⚠️ 另:心跳 json 的 `argv0` 仍指向旧路径 `E:\ProgramData\AIProject\content_marketing_agent\.workbuddy\collab\collabd.py`,而当前工作区是 `contentm_agent`(两个目录**同时存在**)⇒ 协作机制登记的是旧名,待清。 - -**④ 仍未做的(可推翻)**:域外归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 未搬(`docs/pm/` 下仍只有旧版 1a);`goal.json.execution_doc` 仍指旧目标 `…-5199a6/目标执行状态.md`;目标执行状态文档 §10.5 的 B-15 与 §10.7 的 6 条人工确认项仍悬空(不在 5 条判据内)。 - -未做任何写操作(本轮纯核对)。 +# 2026-10-08 工作日志 + +## 00:2x · 目标检查会话 第 11 棒(自动化 6ff7e206) + +- 目标「重写 5 份竞品分析文档并重新生成 MCN 短视频整合营销需求文档」:**判定未完成**。 +- 台账 `tmp/supervise-inbox/tasks.json` 10 条全 `done`、队列空、无僵尸件;`taskgraph.json` 不存在;`goal.json.acceptance_state` 7 条 = 5 过 / 2 不过(判据 5 技能包说人话、判据 6 vibe-product 六份),与 `目标执行状态.md` 逐条一致。 +- L3 现测坐实「落地未做」:全局技能目录 16 份目标文件 mtime 20:23~21:53 < 新稿 23:01–23:08;vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31。 +- 处置:未派棒、未改 lifecycle、未改 acceptance_state、未跑 `--ensure-goal-dir`(本区 `roles = {}`)。 +- 判定书已写入 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/目标执行状态.md`(新增「第 11 棒」节,原第 10 棒节改标「上一棒判定」)。 +- 输入缺失(记账):派活原文指定先读的 `state.py`、`tmp/supervise-inbox/taskgraph.json` 在本区均不存在。 +- 机制侧观察:同一目标已连建 11 棒检查会话,第 8~11 棒结论完全相同(残 2 条跨边界落地、机制侧不可达)⇒ 存在重复空跑;未动代码。 + +## 00:50 · 目标检查会话 第 12 棒(自动化 8da8ec4c) + +- 同一目标:**判定仍未完成**,与第 8~11 棒逐条相同(台账 10 条全 `done`、`taskgraph.json` 不存在、判据 5 过 / 2 不过)。 +- L3 现测复核(00:50):判据 5 落点 `product-planning/` 五份 SKILL.md mtime 01:20/20:23/21:29/21:45/21:53 < 新稿 16 份 23:02–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31 ⇒ 两处落地确实未做。 +- 处置:未派棒(残项唯一剩余动作是域外/跨区写入,本区任务会话域门禁写不了;落地步骤已完整在 `NEED-USER.md` 第 2/3 条)、未改 lifecycle(保持「进行中」)、未改 acceptance_state(值域已规范,无字可改)、未跑 `--ensure-goal-dir`(`roles = {}`)。 +- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 12 棒」节,原第 11 棒节改标「上一棒判定 · 历史」)。 +- 待用户拍板:①「全量」口径 16/19/83;② 检查会话连棒阈值是否收窄(已连 12 棒重复空跑);③ 两条跨边界落地由谁执行(主会话/用户)。 + +## 01:20 · 目标检查会话 第 13 棒(自动化 3a88f456) + +- 同一目标:**判定仍未完成**,与第 8~12 棒逐条相同。机器侧现取 `--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 2.3 分钟|会话全结束|已建检查会话 = 13 棒`。 +- L3 现测复核(01:20):判据 5 落点 `product-planning/` 四份 SKILL.md mtime 10-07 01:20/20:23/21:29/21:53 < 新稿 16 份 23:02–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47(research 4 份/prd 2 份)< 新稿 23:29–23:31 ⇒ 两处落地确实未做。 +- `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅。 +- 处置:未派棒、未改 lifecycle、未改 acceptance_state(值域已规范)、未跑 `--ensure-goal-dir`(`roles = {}`)、未动代码。 +- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 13 棒」节,原第 12 棒节改标「上一棒判定 · 历史」)。 +- 机制侧:连建 13 棒、第 8–13 棒结论完全相同 ⇒ 只要 lifecycle 仍「进行中」且队列空,常驻会继续建第 14 棒,残项机制侧不可达 ⇒ 持续空跑,收口须用户定。 + +## 01:50 · 目标检查会话 第 14 棒(自动化 1baf3a23) + +- 同一目标:**判定仍未完成**,与第 8~13 棒逐条相同。机器侧现取 `--check-status` ⇒ `目标状态 = 进行中|队列未完成 = 0|静默 2.4 分钟|会话全结束|已建检查会话 = 14 棒`;`check-agent.json` 记 `round=14 / reason=queue-empty / idle_min=26.9`。 +- 三路核对:台账 10 条全 `done`(无 pending/running/blocked ⇒ 无僵尸件);`taskgraph.json` 不存在;`goal.json.acceptance_state` 7 条 = 5 过 / 2 不过(判据 5 技能包说人话、判据 6 vibe-product 六份)—— 与 `目标执行状态.md` 逐条一致,值域已规范 ⇒ 无字可改。 +- L3 现测复核(01:5x):判据 5 落点 `product-planning/` 五份 SKILL.md mtime 01:20/20:23/21:29/21:45/21:53 < 新稿 16 份 23:01–23:08;判据 6 落点 vibe-product `proto-board/` 六份 mtime 01:46–01:47 < 新稿 23:29–23:31 ⇒ 两处落地确实未做(读数与前 3 棒相同,无变化)。 +- `--domain-status` 已跑:在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅;本目标域目录 `执行会话/` 空闲。 +- 处置:未派棒(残项唯一剩余动作是域外/跨区写入 `E:/ProgramData/.workbuddy/skills/product-planning/` 与 `E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/`,本区任务会话域门禁写不了 ⇒ 派了必撞门禁;落地步骤已完整在 `NEED-USER.md` 第 2/3 条 ⇒ 无新增可派内容)、未改 lifecycle(保持「进行中」)、未改 acceptance_state、未跑 `--ensure-goal-dir`(`roles = {}`)、未动代码与常驻。 +- 判定书已写入同目标目录 `目标执行状态.md`(新增「第 14 棒」节,原第 13 棒节改标「上一棒判定 · 历史」)。 +- 机制侧:连建 14 棒、第 8–14 棒结论完全相同 ⇒ 持续空跑,收口(收窄连棒阈值/用户结束目标)须用户定,超出本轮范围。 +- 待用户拍板(已连提 7 棒):①「全量」口径 16/19/83;② 连棒阈值是否收窄;③ 两条跨边界落地由谁执行。 + +## 02:1x–02:2x · 主会话:换目标后开工与派活(MCN 产品界面) + +开工四查(全部现取,非快照): +- 常驻在位:pid 71532,心跳 02:16:18,`round=12`,`argv0` 指向本区 `.workbuddy/collab/collabd.py`(旧目标收口后机制自己重新拉起的)。 +- 目标=「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」,`lifecycle` 进行中,判据 5 条全「未过」。 +- 台账 10 条全 `done`(旧目标遗留,非欠项);域锁在册 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致;`--domain-check 执行会话` = ✅ 可派|域空闲。 + +🔴 用户两条口径纠正(已直接落进派活 prompt): + +1. 「第三部分为什么是 open design,选择了 oil-ui-pro,应该不需要使用 open-design」⇒ **本次③段全程不引用 open-design**。 + 核实读数:全局技能根 15 个技能**无** open-design;本工作区 `.workbuddy/skills/` 只有 `aigc-idea-impression`;open-design 只存在于 vibe-product(`vibe-product/.workbuddy/skills/open-design`、`vibe-product/open-design`、`vibe-product/技能库/open-design`)⇒ **本工作区本来就不可得**。 + ③段技能文档那句「本段默认主线」是 2026-10-02 定的**全局通则**(`references/stage-delivery/SKILL.md` 第 3/21/25 行),**不动**;本项目口径= `oil-ui-pro`(方法+独立评审)+ `tiaoyue`(定调/令牌/组件)+ 本段自家两份(`references/layouts-tooling.md` 18,797 B、`references/execution-runbook.md` 39 KB)。 + ⭐ 工具型页面的版式技能文档本就规定走自家 `layouts-tooling.md`(第 94/312 行),**不算回落**;真缺口只有 open-design 的 `craft/` 13 份工艺数值判据 ⇒ **本次无来源,⛔ 不编**。 +2. 「应该要先完成 1 2步 在进行第3步」⇒ **①②段先于③段**。 + +现场核对(1a 到底是什么): +- `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md` 是**汇总型**需求(8 场景 S1–S8/14 功能 F1–F14/假设 A1–A4/风险 R1–R4/9 条待复核),**非** grill 澄清产出。 +- 项目目录只有这一份 ⇒ ①段 1c 画像/1d 策略/1e 场景**未成文**(1a 的 §三/§四/§五 只是草案);1b 竞品在 `content-workbench` 项目下已有,可跨项目引用;②段 `prd/` **整目录不存在**。 +- ⚠️ 摘要里记的 `设计说明.md` **不存在**(工作区根与全盘 find 均无)⇒ 不按它推进。 + +派活:新建一次性排期 `[执行]-[开源项目调研]-MCN产品①②段补齐`(id `844f5231`,02:26 触发,cwds 本区)。 +任务=按①段判据把 1c/1d/1e 三份**成文**(⛔ 不许把 1a 草稿原样复制充数)+ 按②段判据出「功能清单」与「界面布局」两份;⛔ 本轮不做③段。 +域目录 `执行会话`;落点 `执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/`(目录尚未创建,由该会话建;`collabd.goal_dir_name()` 实测名,⛔ 不改)。正式归档路径 `docs/pm/mcn-shortvideo-agent/` 在域外 ⇒ 本轮不写,收口后由主会话搬。 +⚠️ prompt 里 bash 写成显式路径 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`(本机裸 `bash` 会落到 WSL、路径被吃 —— 既有实测)。 + +有意未做:未改 `goal.json` 判据(目标本身没变、仍是③段;①②由棒次次序约束);未改③段技能文档里「默认主线」那句(全局通则)。 + +## 02:2x–02:4x · 用户令:③段默认主线由 open-design 改成 oil-ui-pro + +用户原话:「③段技能文档 stage-delivery/SKILL.md 第 3/21/25 行把它写成「本段默认主线」,默认改为 oil-ui-pro」⇒ **本日志上一节最后那条「未改技能文档默认主线」的记录到此作废**。 + +改动范围(三份文件,共 17 处): + +- `E:/ProgramData/.workbuddy/skills/product-planning/references/stage-delivery/SKILL.md`(12 处):frontmatter description;供给表三行(`oil-ui-pro` 升为「默认主线」、自带样式库升为「默认定调来源」、`open-design` 降为「可选补强,装了才有」);⭐ 说明句;line 30 加统一读法;「不可得时的回落」整块改写成「默认主线不靠它」;子步表 3a/3d 两行;必读表改成三列(环节/读什么/供给);定调来源两处候选换序(自带库首选);3a 第 0 步供给核对;D1 定调;3b 构建六步;`tooling.md` 分工;Gate-1 供给核对项;硬约束「供给默认是 open-design」。 +- `E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md`(5 处):选型表「设计规范文件」行、「审美方向/风格定调」行、「多方向比选/独立评审打分」行;供给两段说明;「多数页面走 open-design 主线」句。 +- `E:/ProgramData/.workbuddy/skills/product-planning/references/stage-delivery/references/execution-runbook.md`(5 处):供给声明;声明制「主干与挡位」示例;必读分工;§1 加统一读法;「定调来源唯一」改自带库首选。 + +统一读法(三份各写一次,口径一致):凡出现 `open-design/...` 路径,一律按「该工作区装了 open-design 才有」读;没装就按默认主线走(`oil-ui-pro` 方法 + 自带样式库定调 + 本段自家 `execution-runbook.md` 与 `layouts-tooling.md` 判据),craft 独有的那几项(反 AI 味/无障碍/表单校验/动效纪律)明说「本次无供给来源」,⛔ 不编。 + +核对读数: + +- 加粗 `**` 计数与改前**逐份一致**(9 / 0 / 0)⇒ 没把「说人话」那轮清掉的加粗又带回来。 +- 命名闸门 `check_naming.py --root <技能包>`:连跑 **14 次**,全部 `通过 46 | 失败 0 | 提示 4`;4 条提示都是 `_留痕/` 与废止说明里的旧词,正当。 +- ⚠️ **闸门首跑出现 `通过 45 | 失败 1`**,失败行被 `tail -20` 截掉、未留证;此后 14 次连跑全部 0 失败 ⇒ 判为**一次性读盘毛刺、未能复现**,未改判据。后续再出现须把完整输出落盘再读。 +- 备份:`归档/③段默认主线改oil-ui-pro前-20261008/`(三份原文件)。改前 md5:`61b8e4a8…`(SKILL.md)/`ed755968…`(stage-delivery/SKILL.md)/`9df4175e…`(execution-runbook.md)。 + +## 02:3x · 🔴 撞车事件:另一个会话把 open-design 随段携带,两会话并发改同一批全局技能文件 + +用户问「是修改的全局技能吗」,核实过程中发现**同一批文件在我改完之后又被写了**(`stage-delivery/SKILL.md` 02:27 48,254→48,330 B;`execution-runbook.md` 02:28 39,752→39,858 B;`layouts-tooling.md` 02:28 18,797→18,811 B)。用户当场确认:「是另一个会话改的,把 open-design 当成可选技能」。 + +那个会话做了什么: + +- 把 open-design **整棵拷进技能包**:`<全局技能包>/references/stage-delivery/assets/open-design/`,**64 MB / 4177 个文件**(源:`nexu-io/open-design@0.23.1`,Apache-2.0,本地裁剪版,版本标记 `0.23.1-crop1`;体量与 `vibe-product/.workbuddy/skills/open-design` 的 64M 吻合)。 +- 把引用口径从**技能名**改成**段内相对路径** `assets/open-design/...`,并把它的定位改成「独立技能 · 可选择使用」。 +- 它的改动与我的改动**叠在同一份文件上、彼此不冲突**:我的「默认主线 = oil-ui-pro」三条句子全部还在(第 3/17/21/25 行等),它的路径改写也在。 + +我做的对齐(13 处): + +- 🔴 发现并修掉**残留矛盾**:它只改了部分路径,导致 13 处仍写着「装了才有/工作区装了/没装/外部供给」—— 而该件现已随段携带、恒在,「装了才有」全错。改法是统一成「**选了它才用(本段自带)**」:总入口 `SKILL.md` 4 处(95/98/101/103)、`stage-delivery/SKILL.md` 5 处(118/120/122/194/197)、`execution-runbook.md` 4 处(6/38/67/79)。 +- `execution-runbook.md:79` 的立论也改了:原写「`open-design` 是外部供给,会被上游更新」⇒ 现为随段携带的本地裁剪版,**上游更新不会自动跟进来**(供给核对的理由随之变化)。 +- 新增 `assets/open-design/ATTRIBUTION.md`:登记来源仓库/版本/许可(Apache-2.0)/裁剪方式/使用口径(默认主线是 oil-ui-pro,本件只作补强)。 +- 🔴 **合规缺口(记账)**:该目录**未随附 Apache-2.0 的 LICENSE 全文**,也没有上游 NOTICE(`find -iname "*license*/*notice*/*attribution*"` 为空)。已写进 ATTRIBUTION.md 并在回复里提报。 + +复核读数: + +- 残留口径 grep:仅剩 `stage-delivery/SKILL.md:48` 一处含「装了」字样,是**否定句**(「不再依赖『工作区级装没装』」)⇒ 正当,已对齐。 +- 命名闸门连跑 3 次:`通过 46 | 失败 0 | 提示 4`。 +- 三份当前:`SKILL.md` 27,317 B / `stage-delivery/SKILL.md` 48,400 B / `execution-runbook.md` 40,000 B。 + +🔴 **闸门首跑 45/1 的根因(结论订正)**:此前记的「一次性读盘毛刺」**证据不足**,实际最可能的原因是**并发写者** —— 我跑闸门的那一刻,另一个会话正在改同两份文件,读到半更新态。判据:那两份文件的 mtime(02:27/02:28)正落在我连跑闸门的窗口内;`check_naming.py` 经 grep 确认**无任何写盘动作**(已排除「脚本自己改文件」)。⇒ 纪律:全局技能包存在多会话并发写,改前先看 mtime、改后必复跑闸门。 + +另:①②段那一棒(自动化 `844f5231`,02:26 触发)**已在跑**:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/` 下 `research`/`prd` 两个子目录已建。 + +## 02:2x · 目标检查会话 第 15 棒(自动化 `788c4126`,只做「核对目标完成状态」) + +- **判定:目标未完成**(换目标后零产出)。三路并集:① 台账 `tasks.json` 10 条全 `done`,但 `goal_fp` 全为 `5199a6`/`72111e` ⇒ **当前目标 `d85687` 零记录**;② `taskgraph.json` 本区不存在 ⇒ 此路无数据;③ `goal.json.acceptance_state` 5 条全 `未过`(不在白名单 ⇒ fail-closed ⇒ 未过)。 +- 现场:当前目标(标题「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」)于 **02:15 换目标**时声明;目录短哈希 `d85687` 与 `sha1(标题)[:6]` 实测一致;`执行会话/` 下只有 `5199a6`/`72111e` ⇒ 当前目标目录与《目标执行状态.md》**均不存在** ⇒ 无法按文档逐条交叉核对验收结论。 +- 门禁/现场:`--domain-status` 在册域锁 1 条(`ai1net-dsh-anywhere ← [协作]N9复测-2248`),锚点词表一致 ✅,本目标域 `执行会话` 空闲;常驻 pid 71532 心跳 02:19:58 `round=34`,`argv0` 指本区 ✅。 +- ⛔ **未派新棒**:在途已有 `[执行]-[开源项目调研]-MCN产品①②段补齐`(`844f5231`,`once` 02:26,`automations/844f5231-…/` 记忆目录不存在 ⇒ 尚未跑过)。理由三条:再派=双投;②段未成文前 ③段无从开工(用户 2026-10-08「先完成 1、2 步再第 3 步」);两条会争同一域锁。 +- ⛔ 未改 `lifecycle`(未完成)、未改 `acceptance_state`(无文档可依)、未跑 `--ensure-goal-dir`(`roles={}` ⇒ 会把检查会话登记成主会话;且目标目录按主会话口径「由该棒建」)、未动代码与常驻。 +- 记录在案(本轮不修,机制变更不许检查会话自作主张):① 本区**无 `state.py`/无 `taskgraph.json`**,而 prompt 第 1/3 项与 `collabd.py --gap` 提示词仍在引用 `state.py`;② `goal.json.execution_doc` 换目标时**未跟着换**,仍指旧目标 `5199a6/目标执行状态.md`(后续检查棒会读错判定书);③ `acceptance_state` 用了非规范值 `未过`(规范=`过|依据`/`🔴 不过|依据`);④ 本轮在**有在途执行棒**时仍被派发 —— 现场读数如实记下,**未读闸门代码、不臆断是否为缺陷**。 + +--- + +## 02:26–02:5x · 任务会话 `[执行]-[开源项目调研]-MCN产品①②段补齐`(sid `fd655683`)· ✅ done + +**目标**:把 MCN 短视频整合营销工作台的①②段产出补齐(③段本轮不做,用户口径「先完成 1 2步 在进行第3步」)。 + +**落盘**(全在目标目录 `执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/`,约 123 KB): +- `research/`:`1a-需求文档.md`(逐字复制件+落本目录说明)|`1b-竞品分析.md`(**跨项目引用登记**,不重写本体)|`1c-用户画像.md`(3 画像)|`1d-产品策略.md`(九节画布+5 条关键假设)|`1e-使用场景.md`(8 条用户故事) +- `prd/`:`2a-产品功能.md`(14 条功能六字段+不做清单对照+六项治理在条目内)|`2b-界面布局.md`(八页骨架) +- `目标执行状态.md` + +**①段就位判定**:1a ✅(汇总型)/1b ✅ 跨项目⇒引用即可/1c·1d·1e 🔴 缺 ⇒ 本轮按各自方法论成文(⛔ 未把 1a 草案复制充数)。 + +**②段骨架(③段的直接依据,已冻结)**:八页 = P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台|P8 记录与对账;一级导航三组照 1a §八 的三个入口,P6 跨组;页型判为**工具型页面**。 + +**本轮守住的几条**:① 1a 的 9 条待复核与 A1–A4 **一条未当事实用**,`2a` §三 逐条标了「依赖哪条/不成立会怎样」,9 条全落「待实现且已排定确认时机」;② 文首写「上游状态」(1b 重写与复核已完成:9 条 2 改 7 不改;引用处标证据等级);③ 说人话自评 7 份逐份给分(46–47/50,门槛 45)。 + +**两处现场更正(供机制记账)**: +- 🔴 派活原文给的 1b 路径 `docs/pm/content-workbench/research/1b-竞品分析.md` **在本工作区不存在**(`docs/pm/` 下只有 `mcn-shortvideo-agent/research/1a-需求文档.md`)。真落点在 `执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/`。 +- 🔴 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md` 是**旧版**(上游状态行停在「正在重写、9 条待复核」),与 72111e 那份内容不同。 + +**悬空项(未编答案)**:投放这段没有场景(1a 待复核第 8 条);机构负责人角色在 1a 里悬空(S7 用了、§四 没列);1c 是零访谈画像(已在文首明说)。 + +**机制侧(未处置)**:`goal.json.execution_doc` 仍指旧目标 `…-5199a6/目标执行状态.md`(需 main 席位跑 `--ensure-goal-dir`);本目标连建 15 棒检查会话、第 8–14 棒结论相同;`acceptance_state` 5 条③段判据里「页面骨架来源已写明(②段缺失时标假设)」的前提升口已不成立(②段已补齐)⇒ 措辞可能要主会话顺手调。 + +**上报**:`--report fd655683… --state done --artifact "…/目标执行状态.md"` ⇒ OK;域锁 `--release-exec` 已释放。域外归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 留给主会话。 + +--- + +## 02:3x–02:5x · 主会话:A 方案落地 —— ③段供给链从「散布复述」收敛为「单一可信源」 + +**缘起**:用户问「默认主线改成 oil-ui-pro 这一个设定为什么要改这么多地方 是不是 本身就是问题」⇒ 诊断结论是**复述式写法**:③段的供给关系被复述约 40 处,改一次必然漏(实测漏 13 处)。用户令「按照建议处理」⇒ 执行 A(立权威供给块,其余引用);B(机器可读清单+校验脚本)作下一层加固,C(反查护栏)只当临时护栏,本轮均未做。 + +**A 方案落盘(本轮,`<全局技能包>/product-planning/` 下 5 份文件)**: +- `references/stage-delivery/SKILL.md`(**权威块所在**,现 46,xxx B): + - §供给 块(17 行起)已含 6 行表:方法主线|定调与令牌|版式骨架|工艺数值判据|独立评审协议|多方向比选,每行给「默认来源 | 可选来源 | 管什么 | 用在哪」。 + - 本轮**新增边界句**(防边界含糊):本块管「有哪几档、谁默认、路径从哪个根起」;各档**内部**具体篇目(如可选档工艺判据下某一篇)属执行细节,留在 runbook 各步里,**不算复述**。 + - 规则句示例行名订正:`§供给·定调档` → `§供给·定调与令牌`(取表左列真名)。 + - 正文 9 处复述点改引用:frontmatter description、禁令查询(`craft/` 篇目列表 → §供给)、一条例外(「craft 里没有」→「供给件里没有」)、限载 ×2(去掉「153 套 / 13 份」计数)、续加新风格(「与 `open-design` 同形」→「与可选档同形」)、第 0 步供给核对(三处路径 → 「可选来源那三处,见 §供给 表」)、D1 怎么选(去 153)、D1 套内读法(「`open-design` 那档」→「可选档那套」)。 +- 总入口 `SKILL.md`(27,xxx B): + - 选型表 4 行改引用(评审原型页/设计规范文件/审美定调/多方向比选)。 + - 正文 6 处:101 整段重写为「六档只在③段 §供给 定义一次,本入口不复述」;103「不与可选档缝成流水线」;105「两个技能」→「供给件」;107 页型分流改引 §供给·版式骨架;109「`stage-delivery` 与 `craft`」→「默认档与可选档」;111 对比度判据改引 §供给·工艺数值判据。 + - 另修 2 处陈旧口径:122「不需要 open-design daemon 在场」→「不需要任何外部服务在场」;215 反面清单「两个页面设计技能(`open-design` / `oil-ui-pro`)」→「供给件(③段自带 `oil-ui-pro` + §供给 各档落在 `assets/` 下的件)」。 +- `references/stage-delivery/references/layouts-tooling.md`(18,xxx B):第 3 行硬路径 → §供给·版式骨架 可选档;第 234 行同;第 238 行「`craft/animation-discipline.md`」→ §供给·工艺数值判据 动效那一份。 +- `scripts/check_naming.py`:第 6 行注释「判据归 `open-design/craft/`」→「归③段 §供给·工艺数值判据」。 + +**核对读数(全绿)**: +- 加粗 `**` 计数逐份**与基线完全相等**:`9 / 14 / 2 / 22 / 48`(改前改后同)。中途一次手滑给 §供给 边界句加了 `**内部**`(+2),当场改回。 +- 闸门:`通过 46 | 失败 0 | 提示 4`。 +- 引用行名与表左列**全对**(11 个去重形态里,除带尾随上下文的截断外,无一别名)。 +- 残留 `open-design` / `craft/` 提及经逐条归类后**全部正当**:`assets/design-capture/*` 与 `assets/design-systems/design-system-tiaoyue/*` 是**逐字搬入的第三方件**(纪律:不改供应商件内容);`_留痕/` 是历史留痕;③段 `SKILL.md` 第 374 行是**修订记录**(dated changelog,记 2026-10-02 那次重接)。 + +**⚠️ 闸门调用有个坑(记账)**:只给 `--root .` 会 FAIL —— 脚本要靠 `--ws` 找「含 `docs/pm` 的那一层」来跑产出白名单检查,缺了就报 `[FAIL] 找得到工作区`。**正确调用**: +`python scripts/check_naming.py --root . --ws "E:/ProgramData/AIProject/content_marketing_agent"` ⇒ 46/0/4。 + +**未做 / 待办(可推翻)**: +- **B 方案**:`assets/supply.json` 机器可读清单 + 校验脚本查「还有没有复述」——未开工。 +- **C 方案**:反查脚本(发现复述即报)——未开工。 +- **runbook 里约 30 处 `craft/xxx.md` 步级篇目引用保留没动**:判定为「档内执行细节」(§供给 已把这条边界写成显式规则),不构成「谁是默认 / 路径在哪」的复述。若认为应一并收敛,说一声即可推翻。 +- 待拍板三项(技能包遗留):全量口径 16/19/83;`product-strategy.md` 与 `user-personas.md` 英文模板被整段译中;7 份方法论文末新补《输出检查》章节。 + +--- + +## 02:4x–03:0x · 用户令「排查产品规划技能中是否还有类似问题一并处理,然后在全面检查一遍」 + +**做法**:先 read-only 摸结构(18 份 md / 无 assets 时 3430 行)→ 写**复述检测器**按「跨文件最大重复簇」聚合(`tmp/dup_scan2.py`,163–164 簇)→ 逐簇判定「会变的事实 vs 正当留痕」→ 收敛 + 修漂移 → 把判据**脚本化** → 变异对照自检。 + +**一、修掉 2 个真漂移(不是复述,是事实已经打架)** +1. 🔴 **停线规则三段 vs 一段对不上**:`stage-delivery` / `stage-discovery` / `stage-proto-doc` 都写「只有**三种**情况停」,`stage-requirements` 写「**四种**」,总入口 §执行规则 写的是**四条**(多一条「①段末的方案确认」)。⇒ 四段一律改成「停线规则见 `product-planning` 的「执行规则」,⛔ 本段不复述」,口径收归总入口。 +2. 🔴 **旧产物路径残留 4 处**:`usage-scenario.md` 的产出声明还写 `strategy/31-使用场景.md`;`stage-proto-doc/SKILL.md` 输入表还写 `strategy/30-产品策略.md`;总入口「产物落哪」表与「②③只读」清单还列着已废的 `ux/`、`ux/diagrams/`、`ux/state-machine.md`。⇒ 全部改成现行 `research/1a~1e`、`prd/`。 + +**二、⚠️ 闸门自己有 bug,把这类病静默藏住了(本轮最大发现)** +- `check_naming.py` 的 `DEPRECATED` 提示循环**用一个 stale 变量 `t`**(该用本轮读到的 `tt`):它前面先跑了一个**空循环**只赋值 `t`、什么都不做,紧接着的 `if old in t` 就永远在检查「上一个循环最后一个文件」。⇒ **旧名提示恒不触发**,上面那 4 处旧路径一处都没报出来(提示数当时只有 4,修好后 25–29)。 +- 另新增 **`DEAD_PATHS` 检查(FAIL 级,不只是提示)**:`strategy/`、`ux/` 这类已废目录形态出现在正文的产出/只读/必读位置即报红;行内含「旧/已废/已改名/曾/历史上/移进/移到/改为/废止/原」等废止标记时豁免(那是正当留痕)。 +- 修好后首跑即报出那 4 处,正是上面第一条要修的。 + +**三、收敛复述(会变的事实 → 单一定义 + 其余引用),权威落点** +- **②—③ 边界**(跨 5 文件 ~19 处)⇒ 权威=**②段 `SKILL.md` 的 §②—③ 交接口**(新立唯一权威块,含两侧逐行对照 + 用户原话唯一出处)。③段那张平行表删除;总入口、①段、runbook、create-prd、②段自身 4 处完成标准/反面清单全部改引用。 +- **可选档骨架名单(营销页向那 8 个)**(10 处 / 4 文件)⇒ 权威=`layouts-tooling.md` 开头(名单 + 为什么工具型不能套,只写一次);§供给·版式骨架 只登记结论。 +- **「说人话」门槛数值**(6 处)⇒ 权威=总入口 §执行规则 内容准则条;各段只留「已过内容准则,评分 X/50」的留证要求。 +- **对比度门槛数值**(3 处)⇒ 权威=runbook 的数值判据段(只登记一次)。 +- **设计契约十二字段的展开清单** ⇒ 权威=runbook §2.1;③段原本把它又铺了一遍,改为引用。 +- **②—③ 定案用户原话**(6 处)⇒ 只在②段 §②—③交接口 出现一次。 +- **1b 两体例的定案原话**(6 处)⇒ 只在 `competitor-analysis.md` 出现一次。 +- **grill-me 的 A / B 节火力点**(4 处)⇒ 只在 `grill-me.md` 定义。 + +**四、把「单一可信源」做成机器可查(原 B/C 方案的正身)** +- `check_naming.py` 新增 **`AUTHORITY` 登记表 + 检查**:每条 = 「一个会变的事实 → 唯一定义处 → 禁止复述的正则」。除定义处外任何 md(排除 `归档/`、`_留痕/`、`assets/`、`_superseded*`、含废止标记的行)出现该模式即 **FAIL**。当前 **9 条**全绿: + ②③边界 | 停线规则(`authority: None` = 全包禁写)| 可选档骨架名单 | 说人话门槛 | 对比度数值 | 契约字段展开 | ②③定案原话 | 1b 定案原话 | A/B 节火力点。 +- **变异对照(用户硬要求)**:向 `stage-proto-doc/SKILL.md` 注入一条含 4 类复述的探针行 ⇒ **4 个 FAIL 全部命中**(停线规则/骨架名单/对比度/悬空旧路径);还原 ⇒ 全绿。**判据不是恒绿**。 +- ⚠️ 中途一次判据过宽:`归②段|归③段` 把「骨架归②段」这类正常行文也算成复述 ⇒ 收紧成只匹配**表头形态** `归②段(…)| 归③段(…)`,并加留痕豁免。 + +**五、顺带查出的 2 处真残留(HINT 修好后浮出来)** +- `grill-me.md` 第 69 行还写着「在 **1c 产品定位与场景** 里不得当作事实使用」——`1c 产品定位与场景` 是**已废子步名**,现行是 1d 产品策略 / 1e 使用场景。⇒ 改为「1d 产品策略与 1e 使用场景」。 +- `usage-scenario.md` 第 88 行引用 `11-竞品分析.md` ——**已废产出名**,现行 `1b-竞品分析.md`。⇒ 改。 + +**六、读数(全绿)** +- 闸门:`通过 2059 | 失败 0 | 提示 25`(提示里 13 条在 `_留痕/`,其余 11 条逐条确认为**正当废止说明/历史事故记录**)。 +- 加粗 `**` 计数逐份**回到上轮基线**:`9 / 14 / 2 / 22 / 48`(本轮新写的强调句已全部压平)。 +- 脚本 `py_compile` 通过。 +- 复述簇总数 164 → 159(剩下的多是 frontmatter description、模板文件头声明、URL 清单这类**正当重复**,以及「统一引用句式」这种**看起来像重复、其实是引用**的)。 + +**有意保留(可推翻)**:各段 `SKILL.md` frontmatter description 里的段名/子步名(路由必需,属「同一事实的多入口声明」而非复述);每份 `references/*.md` 开头的「本文件是 xx 的方法论文档」模板句;`stage-discovery` 的反面清单里仍保留「1b 只交汇总体」等价条目(短句,是 1b 自己的反面清单)。 + +--- + +## 02:5x 目标检查会话 · 第 16 棒(automation a67efdc7) + +**判定:目标「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」= 🔴 未完成。** + +依据(三路取并集): +- 台账 `tasks.json` 11 条**全 done**、无 `running` 僵尸件;`collabd-state.json` 的 `queue_info`= pending 0 / running 0 / blocked 0 ⇒ 队列空。 +- 任务图:`tmp/supervise-inbox/taskgraph.json` **全工作区搜不到**(本轮该路无判据)。 +- `goal.json.acceptance_state` 5 条**全「未过」**,且全是**③段判据**(DESIGN.md 契约与令牌表/原型 HTML 可点通/tiaoyue+oil-ui-pro/页面骨架来源/产物落点)。 +- 目标执行状态文档 `…-d85687/目标执行状态.md` §D 自述:本轮做的①②段**不在这 5 条判据范围内**,③段**未开工**。⇒ 文档与 goal.json 一致,**无需写回**。 + +处置:建 1 条 `once` 执行棒 —— `[执行]-[开源项目调研]-MCN工作台③段界面交互`,id `34ab0198-d0fa-4e9d-978b-6c7f40a2978a`,`scheduledAt=2026-10-08T03:00`,`cwds=E:/ProgramData/AIProject/content_marketing_agent`(**正斜杠**,与既有 29 条排期同形)。域取 `执行会话`(`--domain-check` 判空闲可派;与上一棒 ①②段 同一域、且该域的写边界正好罩住目标目录,避免「产物落点」与「域门禁」互相打架)。⛔ 未改 `lifecycle`(保持「进行中」)—— 没做完不许标完成。 + +**四处理场缺口(照实记)** +1. 派活原文第 1 项 `state.py` **在本工作区根本不存在**(工作区根无此文件);第 3 项 `taskgraph.json` 同样不存在。 +2. `goal.json.execution_doc` 仍指**旧目标** `…-5199a6/目标执行状态.md`(登记于 2026-10-07 17:00)—— 旧账,修法只能由 main 席位跑 `--ensure-goal-dir`。 +3. `acceptance_state` 的值写作 `未过`,**不在规范取值域**(应为 `🔴 不过|…`);本轮**未改**(写回属"已完成"分支的活)。 +4. 技能里的「文档合同」写的是 `<目标目录>/目标执行状态.md` 由**目标检查会话**写,而本目标 14 棒检查会话都没写(含本棒)⇒ 合同与实况有差。 + +常驻在位:pid `34556`,心跳 age 3.2 s,`argv0` 指本区 `.workbuddy/collab/collabd.py`。 + +--- + +## 04:2x 目标检查会话 · 第 17 棒(automation d28817a0) + +**判定:目标「根据 1a 需求文档生成 MCN 短视频整合营销工作台的产品界面」= ✅ 已完成。** + +依据(三路取并集): +- 台账 `tasks.json` 12 条**全 done**(新增第 12 条 `34ab0198`=③段界面交互,t_end 04:20),无 `running` 僵尸件 ⇒ 队列空(`check-agent.json` 的 `reason=queue-empty`、`queue_pending=0` 印证)。 +- 任务图:`taskgraph.json` **本工作区不存在**(该路无节点,⛔ 不是"未完成")。 +- `goal.json.acceptance_state` 5 条原本全 `未过`;目标执行状态文档 §10.3 **逐条给「✅ 过」**,与 goal.json **不一致** ⇒ 按规则**以文档为准**。 + +处置(本轮做的两件事): +1. `goalctl.py declare --kpi "…" --yes`(by=本会话)把 5 条判据写回规范写法 `过|依据`,**已回读 `goal.json` 确认**(5 条齐全、无 `;` 截断)。 +2. `collabd.py --set-life 已完成 --by "…"` ⇒ `进行中 → 已完成`;**常驻程序随之优雅退出**(pid 34556,因"目标已完成")—— 属设计行为,⛔ 不是故障。 + +**产物文件级取证**(不是只信文档):`…-d85687/ui/` 下 `DESIGN.md`(47.8 KB)、`mcn-workbench.html`(130 KB)、`3b-实测记录.md`、`3c-GPT会诊.md`、`3d-审查报告.md`、`_tools/`(3 脚本)、`_gate_shots/`(23 PNG) 全部在位;`prd/2b-界面布局.md`、`research/` 五份齐。 + +**四处照实记的缺口(本轮无权处置)** +1. 派活原文第 1 项 `state.py` **本工作区不存在**;第 3 项 `taskgraph.json` 同样不存在(与第 16 棒同)。 +2. `goal.json.execution_doc` 仍指**旧目标** `…-5199a6/目标执行状态.md` —— 未清;修法只能 main 席位跑 `--ensure-goal-dir`。 +3. 目标执行状态文档 §10.5 的 **B-15**(≤767px 一屏 <6 行,自检红)与 §10.7 的 6 条**人工确认项**(含假设 1/2)**仍悬空** —— 但**不在** `acceptance_state` 的 5 条之内 ⇒ 未据此判未过。 +4. 文档 §七.B 两项域外动作(搬 `docs/pm/mcn-shortvideo-agent/`、覆盖旧 1a)仍等主会话。 + +⛔ 本轮**未派活**(目标已完成),也未动域锁(`--domain-status` 显示仅 1 条在册域锁,属他区会话,与本目标无关)。 + +## 08:0x · 主会话:用户问「之前的目标完成了吗」—— 全量现场复核(L3 现测,非读文档) + +**结论:最新目标 d85687 ✅ 已完成;上一目标 72111e 的两条残项**现已全部落地**(此前 7 棒判定"未完成"的判据 5/6 已被后续动作消掉)。** + +**① 当前目标 d85687(MCN 界面)= ✅ 已完成**(L1+L3 双证) +- `goal.json`:`lifecycle = 已完成`(04:27:26,第 17 棒)/`acceptance_state` 5 条全为规范写法 `过|依据`(DESIGN.md 契约令牌/原型 HTML 81 项自检绿/tiaoyue+oil-ui-pro/骨架照 2b 八页 37 板块/落点可追溯)。 +- 文件级:`research/` 5 份(02:28–02:29,1a 24317/1b 7899/1c 16234/1d 17660/1e 15881)|`prd/` 2 份(02:30,2a 25958/2b 15036)|`ui/DESIGN.md` 47,835 B(04:16)|`ui/mcn-workbench.html` 130,371 B(04:10)|`3b` 22,659/`3c` 27,887/`3d` 25,080|`_gate_shots/` 23 PNG(04:12)|`_tools/` 3 脚本。 + +**② 上一目标 72111e 的两条残项 —— 已消除(本轮新取证,推翻第 8–14 棒的"未完成"读数)** +- **判据 6(vibe-product 六份)✅ 真落地**:`E:/ProgramData/AIProject/vibe-product/docs/pm/proto-board/` 下 research 4 份 + prd 2 份,**md5 与新稿逐字节全同**(1a `84965bc6…`/1c `57866674…`/1d `a17e249a…`/1e `27925667…`/2a `d32320b9…`/2b `af827824…`),mtime **02:10** > 新稿 23:29–23:31;字节数由旧 3034/3383/3121/… 变为 12063/9201/12991/… ⇒ 确系被覆盖,⛔ 不是空转。 +- **判据 5(技能包说人话 16 份)✅ 实质落地**:`归档/技能包-说人话-落地前-20261008/` 备份在位(02:09,SKILL.md 27,120 B)⇒ 覆盖动作做过。16 份中 6 份 md5 与新稿全同(competitor-analysis/product-strategy/user-personas/doc-area-spec/guided-tour/state-machine);另 10 份**差异全部是后续合法增量**(02:49–02:51 覆盖 + 02:3x–03:0x「A 方案单一可信源收敛」+ 排雷)—— diff 实证:`usage-scenario.md` 只差 2 行(`11-竞品分析.md`→`1b-竞品分析.md`、`strategy/31-使用场景.md`→`research/1e-使用场景.md`,正是排雷那两改)。落点 §供给 计数 stage-delivery 31/总入口 9/layouts-tooling 4 ⇒ A 方案确已进落点。 + +**③ 🔴 机制侧新发现:常驻空转循环(仍在发生)** +- 04:27:26 常驻因「目标已完成」优雅退出后,**保活计划任务仍每 5 分钟拉起一次**,进程启动 2 秒即因 `guard.stop` 退出 ⇒ `_collabd.log` 里 04:27:26–07:52:57 共 **43 次** `supervise loop start` → `守护已停 ⇒ 优雅退出`(末次 pid 70572,07:52:55→07:52:57)。 +- 心跳 `supervise-heartbeat.json` 停在 04:27:16(pid 34556,round 626)⇒ 与日志一致。 +- ⚠️ 另:心跳 json 的 `argv0` 仍指向旧路径 `E:\ProgramData\AIProject\content_marketing_agent\.workbuddy\collab\collabd.py`,而当前工作区是 `contentm_agent`(两个目录**同时存在**)⇒ 协作机制登记的是旧名,待清。 + +**④ 仍未做的(可推翻)**:域外归档 `docs/pm/mcn-shortvideo-agent/{research,prd}/` 未搬(`docs/pm/` 下仍只有旧版 1a);`goal.json.execution_doc` 仍指旧目标 `…-5199a6/目标执行状态.md`;目标执行状态文档 §10.5 的 B-15 与 §10.7 的 6 条人工确认项仍悬空(不在 5 条判据内)。 + +未做任何写操作(本轮纯核对)。 + +## 08:1x–08:2x · 用户三条令:①停本区保活 ②协作机制登记改现名 ③旧的去掉 + +**根因(先取证,不是推断)**:本区目录已由 `content_marketing_agent` 改名 `contentm_agent`,但**登记没跟上**: +- `collabd.config.json` 的 `workspace` 仍写旧名 ⇒ 常驻(实测 pid 56368、08:05:23 起、`argv0` 指向**技能源** `E:\ProgramData\.workbuddy\skills\session-mechanism\scripts\collabd.py`,⛔ 不是本区发布物)把心跳/日志/状态全写进**已不存在的旧目录** `content_marketing_agent/`(该目录只剩 `.workbuddy/collab/logs/` 4 文件 + `tmp/supervise-inbox/` 3 文件=空壳)。 +- `collabctl.py` 的 `WORKSPACES`(L70) 与 `KEEPALIVE_TASKS`(L87) 硬编码旧名 —— **源 + 3 个区副本共 4 份**都要改。 +- ai1net 的 `collabd.config.json` 的 `peer_workspaces` 里也列着旧路径。 + +**已做(全部改前备份 `.bak-*20261008`、改后回读核对)**: +1、`collabctl.py` × 4(源 + contentm_agent/ai1net/vibe):旧名 → `contentm_agent`(各 2 行)⇒ py_compile 4 份全过。 +2、本区 `collabd.config.json`:`workspace` → 现名 + `_改名说明20261008` 留痕(JSON 合法已验)。 +3、ai1net `collabd.config.json`:`peer_workspaces[1]` → 现名 + `_peer_变更20261008`。⚠️ 看板需重启才吃到(配置模块级只读一次,P0-38)—— **本轮未重启看板**。 +4、停本区:开关 off + 注销旧保活任务 `collabd-keepalive-content_marketing_agent`(**定义已导出备份** `tmp/_oldtask_backup.xml`)。 +5、旧空壳目录 `content_marketing_agent/` ⇒ 改名 `content_marketing_agent.RETIRED-20261008`(**零删除、可逆**;改名后到 08:24 无新写入,确认无人再写)。 + +**🔴 事故(如实记)**:`collabctl.py off --ws <本区>` **没有真正收敛** —— `disable_tasks()` 已按 ONLY_WS 跳过看板,但 **`kill_all()` 的第二段 `list_procs()` 是全机扫描、不认 `--ws`** ⇒ 一次杀掉 **5 个进程**,其中含 **ai1net(pid 73304 前身)/vibe/看板**。 +- 已当场恢复:`on --ws ai1net` + `on --ws vibe` + PowerShell 重新启用并触发 `dsh-board-keepalive` ⇒ 三处全绿(ai1net pid 73304/vibe pid 26992/看板 20099 pid 14136 在听)。 +- ✅ **已修根因**:`kill_all()` 在 `ONLY_WS` 时**只杀本区心跳里记的 pid 并提前 return**,⛔ 不做全机扫描;另修 `cmd_off` 打印里「看板 1」是常量 `+1`(ONLY_WS 下看板根本没禁,数字却照加)⇒ 改为按 ONLY_WS 分别打印。**4 份同步改,py_compile 全过**。 +- 实证(⛔ 未做起停实验):注入 ONLY_WS 调 `kill_all()` ⇒ 返回 **0**(改前是 5),随后他区 pid 与看板**pid 未变、仍在活**。 + +**验收读数(08:2x 现取)**:contentm_agent = 开关 off/常驻停 ✅|ai1net ✅ 活|vibe ✅ 活|看板 ✅ 在监听|计划任务:仅 ai1net/vibe/看板 Running,旧名任务已注销。 + +**未做**:看板未重启(改 ai1net 的 peer 要重启才生效);本轮改动**未 git 提交**(用户未要求)。 + +## 08:2x · 用户质疑 d85687 界面粗糙:取证分析(read-only) + +**用户原话**:界面设计很粗糙,不是预期的高保真有设计感的界面,连视频截图的那款产品都赶不上,怀疑是不是用了 oil-ui-pro 和 tiaoyue。 + +**取证结论:供给没撒谎,真用了 —— 但「用了」只等于「套了皮肤」,粗糙是真问题,根因四层**: + +1、**令牌逐值吻合(L3)**:HTML `:root` 与 `design-system-tiaoyue/assets/tokens.css` 逐值一致(`#faf9f5` 纸感底/`#9E4CFF` 紫/卡片 24px 圆角/按钮 26px 胶囊);截图印证(米白底、白卡、紫胶囊按钮「确认归因并回写」)。oil-ui-pro 在全局技能根**存在**,tiaoyue 在 `product-planning/.../assets/design-systems/` **存在**,DESIGN.md §〇 有供给核对。 + +2、**粗糙的量化铁证(L3,最硬一条)**:`mcn-workbench.html` 1865 行里 **`` 0 个、`` 0 个、chart 0、`` 0、gradient 0** —— 一个**短视频矩阵工作台**,没有一个图标、没有一张视频缩略图、没有一处数据图表、没有一处渐变/插画。P1「账号矩阵列表」全是纯文字行;P7 复盘台的「播放 8.6 万/完播 41%/三连率 6.3%」就是三个数字块。视觉资产密度≈线框图。 + +3、**四层根因**: + - **A 供给本身薄**:tiaoyue 的 tokens.css 只有 **46 行**,只有色值/圆角/按钮/输入框/卡片皮肤(取自 tiaoyue.com 官网 clipper)—— 官网是低密度营销页,这套「极简纸感」套到高密度数据工作台上就「没东西看」;它**不含**图标系统/图表规范/缩略图/空状态/状态色语义。 + - **B 判据里没有「保真度」**:goal.json 5 条判据全是工程向(契约落了/可点通/来源写了/骨架一致/落点可溯);自检 81 项、变异 13、骨架机检全是「对不对」,**没有一项测「好不好看」** ⇒ 门禁全绿但用户要的东西不在测量范围。用户换目标时的原话只指定了「用 oil-ui-pro 和 tiaoyue」,没定视觉水准 ⇒ 判据天然缺口。 + - **C 方法论反噬**:oil-ui-pro 的「反 slop」判据专防 AI 味装饰(禁紫→粉渐变、禁 hero),防过头 ⇒ 该有的信息可视化元素一个没画;DESIGN.md 里「保真/美观/视觉」全文只出现 2 次。 + - **D 精力分配**:③段那一棒把力气花在合规与证据(说人话自评、23 张截图像素校验、供给核对、变异对照)上,视觉只有 3a 一步拿令牌;10.6 偏离单如实记了 3c 评审不是外部 GPT(是隔离上下文执行者)、3b 没走真人点验。 + +4、**修复方向(待用户拍板后执行)**:保留八页骨架与交互清单(②③段机检仍有效),**重做视觉层**:图标系统+数据可视化(趋势/完成率小图)+视频缩略图卡+状态色语义+层次阴影;并给「高保真」立可判据的标准(对标物截图逐项对照),写进验收判据,⛔ 不再让「好看」游离在门禁外。 + +## 08:4x · 用户追加质疑「排版布局像 10 年前后台管理系统,不像 agent 产品」—— 第二轮取证(read-only) + +**验证结果:用户的判断与 3c 独立评审的结论几乎一字不差,而且评审当时就把问题点名了、却被权限边界挂起。** + +**一、布局形态实证(L3 读 CSS,非看文档)** +- `mcn-workbench.html:70` —— `.app{ display:grid; grid-template-columns:var(--nav-w) minmax(0,1fr) }`,`--nav-w:240px`;主区= `topbar`(sticky)+ 内容 flex column,内容里全是 `.panel > .row` 横条行。⇒ **就是「左侧固定导航 + 顶栏 + 行式列表」这套后台骨架**。 +- 信息呈现=**行式列表**:②段 `2b` 把 P1 第二板块写死成「账号矩阵列表 —— **一行一个账号**,行内三件事」,③段照做。 + +**二、为什么改不动(这是最硬的一条)** +- ②段 `2b` 文首两条硬规:**「全文零视觉词」** + **「交给③段时骨架是冻结的,③段不许新增/移动/删除板块」**。 +- ③段另有**机检闸门** `check_skeleton.py` 把八页 37 板块与②段**逐页逐位**比对 ⇒ ③段改了就报红。 +- ⇒ 三段分工里 **没有任何一段负责「形态语言」**:②段只给块名与顺序,③段只给皮肤与交互,「这产品该长成什么样」没人管。 + +**三、供给里就没有 Agent 型形态** +- `layouts-tooling.md` 的四个骨架档位=**行式列表(明写「工具型主形态·默认首选」)/表格式清单/详情面板/主从侧区**,另加红线五条与「反实习生审美」五条 ⇒ **没有**对话式、指令入口、Agent 运行态、生成结果采纳、画布这类 Agent 产品形态档位。 + +**四、🔴 评审早就点破了,而且被挂起(硬证据)** +- `3c-GPT会诊.md` 评审原话(逐条):品类应属 **B2B 数据工作台/运营控制台**(参照 Linear/飞书多维表格/蝉妈妈·新榜·飞瓜);「这些产品的共识=**主视觉是数据本身**(表/矩阵/图表),不是『卡片+说明文字』」;「**卡片化+大留白**(每组内容都包成 24px 圆角白卡)= **没认出品类**,工具台第一诉求是信息密度不是呼吸感」;「遮住文字后**认不出是任何一家**…侧栏像 Linear/Notion 通用骨架,卡片+淡紫按钮像 **shadcn/Tailwind 的默认产出** ⇒ 不是克隆,是**没有品牌辨识度的通用后台**」。 +- `3d-审查报告.md` **S-16** 与 `3c` **R-21**(同一条,两次提出):「建议把 P1『账号矩阵列表』做成**真正的矩阵 + 异常分布**,这是全篇最有可能做出记忆点的一处」⇒ 处置=**「已知不修·往上提」**,理由「板块名与位置受②段冻结,矩阵视图是**信息呈现变更**,超出③段权限」⇒ **没有任何人拍板,就这么挂着**。 + +**五、三层叠加的最终诊断** +「像 10 年前的后台」与「没有品牌辨识度的通用后台」是**同一个病的两面**:① 形态骨架=后台(供给默认档位就是行式列表);② 视觉=通用皮肤(tiaoyue 纸张感是官网皮,套在控制台上);③ **缺一层「这产品自己长什么样」的形态定义** —— ②段不许写视觉、③段不许改骨架,中间这一层是空的。 + +**六、修复必须动②段(⛔ 只重做③段视觉治不好)**:至少三处要回②段 —— P1 从「一行一个账号」改成真矩阵/卡片流;给 P4 创作台与 P7 复盘台的 AI 环节定「Agent 运行态」的呈现(生成中/建议/采纳驳回);主视觉从「卡片+说明文字」换成「数据即主视觉」。⇒ 这些都要先改 `2b`,再让③段跟着重做,机检闸门同步更新。 + +## 08:5x · 主会话:骨架优化方案已落盘(用户问「骨架应该如何优化」) + +- 产出:`执行会话/目标-…-d85687/prd/2b-骨架形态优化方案.md`(Ⓐ 新增,⛔ 未改 `2b` 原文)。 +- **骨架四宗病**(每条都给了 `2b` 出处):① 八页同构 —— 每页都是「从上到下堆 4–5 块」的纵向单列 ⇒ 做出来就是八个长得一样的后台表单页;② 列表是唯一信息呈现 —— P1/P2/P3/P6/P7/P8 **六页主视觉都是列表**,产品叫「矩阵工作台」却一处矩阵没有;③ **没有 AI/Agent 的位置** —— P4 七环节没写哪步出 AI 产出、产出放哪、怎么采纳驳回,P7「归因结论区·由人确认」也没给 AI 结论留块;④ 缺一层「形态语言」—— ②段不许写视觉、③段不许改骨架,中间「这产品该长成什么样」没人管。 +- **逐页改法**:P1 真矩阵(账号×日期网格,异常标在格上,顶部今日行动条)|P2 缩略图卡片流+倍数徽章+紧凑 KPI 条|P3 摘录卡网格+详情改右抽屉|**P4 最关键** —— 流水线画布(环节轨道常驻)+ **新增 AI 产出区(生成中/已生成 + 采纳·驳回·改后再用)**+ 资产引用改右侧常驻(⛔ 不再是可点入折叠块)|P5 原稿×各平台版本对照 + 检查改逐条 diff|P6 画像卡+记忆时间线(记忆「只追加」天然是时间线,现在写成可点入把形态浪费了)+账号改顶部横向切换条|P7 数据即主视觉 + 归因拆成「AI 归因结论(可编辑)」与「人确认/改判」两块(现在是混在一块里)|P8 三栏对照(内容/发布记录/收支)。 +- **②段要补三件事**:每页加「形态」字段(主视觉是什么+空间关系,⛔ 这不算视觉词)/每页加「AI 在哪」字段(八页逐页给结论,没有要写「无」)/全局加「形态语言」一节并规定**不许八页同构**。 +- **执行顺序(倒不得)**:先改 `2b` ⇒ ③段重做 ⇒ `check_skeleton.py` 机检基线同步更新(它现在拿旧骨架当权威,改一位就报红)。 +- ⛔ 本轮只出方案,**未改 `2b` 原文、未动③段、未改闸门**。 + +## 08:5x · 🔴 用户纠正:骨架是②③交叉知识,形态归③段,③段可往更好体验改 —— v1 方案作废,v2 重出 + +**我的错(v1 偏差)**:把「P1 做成矩阵」「P5 做成对照」这类**形态决策**当成块级改动推给②段,方向反了。 + +**核实到的权威口径(读文件,⛔ 不是记忆)**: +- ②段 `stage-requirements/SKILL.md` §②—③ 交接口(唯一权威处,2026-10-06 用户定案):「②段钉骨架,③段做皮肉」。归②段=有哪几页/每页几个板块怎么排/跨页关系/每页主操作/每条信息哪一档;归③段=配色字体间距组件样式动效/每个板块的视觉实现/交互行为/状态与空态/响应式。「骨架是判断基准必须在②段定死」「③段不许新增/移动/删除板块」⇒ **冻结的是块级,不是形态**。 +- `layouts-tooling.md` 文首**明写「⛔ 本文件是 `stage-delivery` 自己的东西」**、「工具型页面的版式在本项目只有这一份来源」,§0 就是「**先判形态,再挑骨架**」⇒ **形态归③段**,③段有裁量权往更好体验改。 + +**v2 方案(`prd/骨架优化方案-v2-②③分段.md`,v1 改名 `骨架优化方案-v1-作废-形态误归②段.md` 留档)**: +- **归②段(只三处)**:① 删越界形态措辞 —— P1「一行一个账号」、P2/P3/P7/P8 块名里的「列表」都是形态词,侵了③段地盘,改中性块名(块名写「列表」③段就被迫画列表,这是「像后台」的源头);② 给 AI 产出补块位 —— `2a` 里 AI 状态流转(`idle→抓取中→已出候选→已采纳/忽略`、失败重试、生成不覆盖)都有,但 `2b` P4 **没有一个块承载它** ⇒ P4 加「AI 产出与采纳」,P7 把「归因结论区·由人确认」拆成「归因结论(可编辑)」+「确认与改判」两块;③ 分档跟着改(新增块=主屏常驻;P1 异常值若并入矩阵则降档,⛔ 须回②段改,③段不能自己改档)。 +- **归③段**:① 逐页用 §0 判形态(P1 列表型但**矩阵是表格式清单的轴转置排布**,③段直接画,⛔ 不需②段改块名;P3/P6/P7 侧区型或详情型,P4 详情型,P5/P8 列表型+对照);② **补 `layouts-tooling.md` 四个形态档**(矩阵型/对照型/流水线型/时间线型)—— 现有 §0 只有列表型/详情型/侧区型三类,不够用;③ 体验上③段可主动改(数据密度、AI 生成中态与可中断、状态与空态、响应式,含 B-15 那条窄屏账)。 +- **执行顺序**:形态问题在③段解决,块级问题才回②段;机检 `check_skeleton.py` 同步(②段改块名后不同步会误报)。 +- ⚠️ **待拍板(已转用户)**:补档要动 `layouts-tooling.md` —— 它是**全局技能包**文件,改了会影响别的工作区 ⇒ 必须由用户拍板。 + +## 09:0x · 用户拍板(1A 补全局库 + 2C 两边一起改)—— 执行与全绿验证 + +**拍板原文**:「1 按照建议处理(=四形态档补进全局版式工具库);2 C 两边一起改,免得后面忘了」。 + +**已做(全部改前备份、改后复跑闸门/自检)**: + +1、**全局库补四档**(`layouts-tooling.md`,备份 `.bak-add4forms-20261008`):§0 形态表加 **矩阵型/对照型/流水线型/时间线型** 四行(并加「列表型里并列发生在两个维度上 ⇒ 判矩阵型 ⛔ 不是列表型;矩阵是表格式清单的轴转置排布,⛔ 不需要为它新增板块」的判读);新增 **§4.5–§4.8** 四节(各带适用/判定要点,流水线型里写死「🔴 AI 产出环节必须有独立产出区:生成中要有进度与可中断、产出与人的编辑分区、采纳/驳回是显式动作 ⛔ 不许默认等于采纳」)。**闸门复跑 `check_naming.py --root <包> --ws <本区>` = 通过 2059 | 失败 0 | 提示 25(与基线同)**。 + +2、**②段块级 17 处**(`2b-界面布局.md`,备份 `.bak-20261008`,脚本 `tmp/fix_2b_blocks.py` 可复算): + - 删形态措辞:P1「账号矩阵列表——一行一个账号,行内三件事」→「账号矩阵」(加一句 ⛔ 不写怎么呈现,归③段);P2「对标内容列表」→「对标内容」;P3「条目列表」→「资产条目」;P7「待复盘列表」→「待复盘项」;P8「发布记录列表」→「发布记录」;评论区洞察区→评论区洞察(补「出 AI 候选选题,2a F3」);分档表与跨页关系同步。 + - P4 插入「**AI 产出与采纳**」块(生成中/已生成/失败重试 + 采纳·驳回·改后再用),分档=主屏常驻。 + - P7 拆出「**确认与改判**」块(采纳/驳回/改后再用),「归因结论区·由人确认」→「归因结论(由 AI 给出,可编辑)」。 + - 八页板块 37 → **39**。 + +3、**③段同步(原型 + 双闸门)**: + - FROZEN 表同步 39 块 ⇒ `check_skeleton.py`(外部机检,比对 ②段文档 ↔ FROZEN)**PASS**。 + - ⚠️ 第一次只改 FROZEN 时,原型自带自检(比对**渲染** ↔ FROZEN)报 3 FAIL ⇒ 坐实「FROZEN 与渲染两张表各改一边就没人发现」的设防是对的。随后改渲染:P3/P7 标题同步、**P4 真加「AI 产出与采纳」section**(S 加 `aiOut`/`aiVerdict` 状态;P4-03 改为**只写 aiOut ⛔ 不写正文**,采纳(P4-09)才并入 stepOut —— 落实「产出与人的编辑分区」;P4-10 驳回/P4-11 改后再用/P4-12 中断生成)、**P7 加「确认与改判」section**(P7-06/07/08)。 + - 自检场景补 2 条(P4 AI 待裁决/P4 生成中)—— 没有它们新 act 会被判「从未被驱动=死控件」。 + - **终验:自检 PASS 81 / FAIL 0**;`check_skeleton.py` PASS;P4 截图确认新块在位(`_scratch/p4-new.png`)。 + +## 09:2x · 用户令「检查技能修改是否到位,是否支持生成最新 AI agent 工作台的布局和样式」—— 验收结果:布局支持、样式零供给 + +**一、布局层:四档在位,但**登记漏了两处,本轮已补**(这是我自己上一棒改动的遗漏)** +- 在位:`layouts-tooling.md` §0 表有矩阵型/对照型/流水线型/时间线型四行,§4.5–§4.8 四节齐(19,082 → 23,976 B,+4,894)。 +- 🔴 漏的两处(都是"读到旧清单"⇒ 执行时不会去看新档):③段 `SKILL.md` **§供给 表「版式骨架」行**仍写「行式列表 / 表格式清单 / 详情面板 / 主从侧区」;`execution-runbook.md` 第 65 行同样写旧四档。 +- 已补(各备份 `.bak-agentforms-20261008`):两处都改成**指引式**(「工具型八档的名单与判读见 `layouts-tooling.md` §0,⛔ 不復述名单」)—— 遵守单一可信源:名单只留在 `layouts-tooling.md` §0,§供给 不复述。 +- 闸门复跑:`通过 2059 | 失败 0 | 提示 25`(与基线同)。 + +**二、🔴 样式层:完全不支持 Agent 工作台(硬缺口,⛔ 不是"没配好",是供给里根本没有)** +- `design-system-tiaoyue` 组件库 **277 个自有组件族**,grep `AI/生成中/进度/建议/采纳/驳回/diff/流式` **零命中**(唯一命中的 "AI" 是 `maiya-btn` 里的字母)。 +- `tokens.css` **46 行**,grep `ai/gen/progress/stream/skeleton/diff/suggest` **零命中** ⇒ 没有生成中态、AI 输出卡、diff 对照、采纳按钮组的任何令牌。 +- 组件库第三部分 Element Plus 基座只有 **14 个浮层/输入类**(dialog / dropdown / input / popover / tooltip / scrollbar),`el-steps`、`el-timeline`、`el-progress`、`el-skeleton` **一个都没有** ⇒ 连流水线轨道和时间线都拼不出来。 +- ⇒ 结论:③段能**判**出要用矩阵/流水线/时间线(布局层有了),但**画不出** Agent 的样子(样式层无来源)。 +- ⛔ tiaoyue 是**逐字搬入的第三方件**,纪律不许改它的内容 ⇒ 只能③段自建补遗(参照 `layouts-tooling.md` 的自建先例)。 + +## 09:3x · 用户怀疑「tiaoyue 要登录,是不是抓取时没登录、漏了信息」—— 取证结论:**登录态有,漏的是交互态** + +**一、登录态:抓到了(⛔ 不是没登录)** +- `design-system-tiaoyue/references/capture-notes.md` 第 49 行逐字:**「源站是明暗双主题(首页默认 dark #0b0b10),本次抓到的是*登录后的亮色形态*」**。 +- 旁证:组件库按页列出**业务页**专属族 —— 首页(26)/短视频(40)/转绘(4)/剧本(15)/资产(19)/空间(15)/团队(4),共 277 族 ⇒ 这些页面**不是公开首页**,没登录进不去。 +- ⇒ 用户怀疑的方向**对了一半**:信息确实漏了,但⛔ 不是登录态问题。 + +**二、🔴 真正漏的是「交互态」(clipper 只拍静态快照)** +- 在 1.4 MB 的原始产出 `design-system.html` 里 grep `生成中/AI/建议/采纳/驳回/diff/流式/骨架屏/spinner` ⇒ 只有 `loading` 23 处与 `progress` 5 处,**零 AI 产出类组件**。 +- 根因:clipper 拍的是**页面静态快照**;生成中态、AI 输出卡、采纳/驳回、diff 对照**只在动作发生时才出现** ⇒ 静态抓不到。这与登录与否无关。 +- ⇒ 所以「参考 tiaoyue 的界面排版布局」能拿到的是**布局骨架与视觉语言**(277 族里有作品流、资产网格等),拿不到的是**Agent 交互态** —— 那部分仍须自建。 + +**三、顺带查到两处旧账(都在技能包里明写,⛔ 不是我推断)** +- ① **暗色令牌未抓**:capture-notes 第 49 行同一句写明「暗色令牌未单独抓取」。 +- ② 🔴 **现在用的这套亮色令牌,是不是 tiaoyue 主线未裁决**:`known-conflicts.md` C-01 明写「同一个站两次独立抓取给出**两套不同的值**(A 路 clipper 9 页 = 现在用的 tokens.css/B 路 CDP 活动页 DOM)」,裁决内容只有「暗亮不混搭」,而「**哪一套才是主线**」仍是 ⛔ 未裁决,且注明要「在主线页面同批抓一次 light+dark 才能定,**需要动技能之外的抓取动作**」。 + ⇒ 含义:③段现在照着做的这套令牌,**连"是不是 tiaoyue 主线"都没定论**。 + +## 09:4x · 用户澄清「我说的是界面布局、如何布局排版」—— 取证:**那部分信息抓到了,就在库里,是做的时候没用上** + +**一、tiaoyue 的布局骨架(从组件库全局组件"9 页通用"里逐条读出)** +- 外壳三段:`sidebar-shell`(9/9 页)→ `app-sidebar`(9/9)+ `layout-header`(9/9)+ `layout-main`(9/9,含 `--no-scrollbar` 变体)⇒ **侧栏壳 + 顶栏 + 主区**。 +- 侧栏是**可展开**的(`is-expand-right`),带导航提示层(`nav-tips-layer` / `nav-tips-viewport`)与路由激活态(`router-link-active`)。 +- 顶栏有通知铃铛+徽章(`notification-trigger__badge`)与头像按钮(`header-avatar-btn`)。 +- 有**分区背景** `app-bg` 与 `app-bg--creative-workbench`(创作工作台专用,3 次)⇒ 不同工作区给不同底。 +- ⇒ **这套外壳与我们原型的「240px 侧栏 + sticky 顶栏 + 主区」是同一套**,用户觉得「像后台」⛔ 不是因为外壳抄错了。 + +**二、🔴 真正的差距在「内容区怎么排」,而这条信息库里有、我们没用** +- tiaoyue 资产页:**封面卡片网格** —— `asset-card`(180 次 / 20 张卡,带 `__cover` 封面、`--clickable`、`--meta`、`__meta-tags`)+ `asset-media-cover`(80 次,带 `--ratio` 固定比例)+ `asset-card-official-meta`(标题/创作者/创建者名)+ `asset-multi-select-filter`(266 次,筛选器)。 +- tiaoyue 空间页:`project-folder-design-v2`(**立体文件夹视觉**:`__stage`/`__back-assembly`/`__front-assembly`/`__sparkles`)+ `space-create-button` + `space-quota-progress`(配额进度)⇒ 同样是卡片化、有视觉主体。 +- 我们的原型:`` 0 次、`` 0 次 ⇒ P1 账号矩阵是纯文字行、P3 资产库是纯文字条目,**一处封面卡都没有**。 +- ⇒ 结论:**「像 10 年前后台」的真因是内容区只有文字行,而「内容区该长成什么样」的参考(封面卡 + 固定比例 + 元信息标签 + 筛选器)就写在组件库里,③段做的时候没取用**。 + +**三、由此收敛出的修复方向(⛔ 不用重抓,现成参考就在库里)** +- 内容区从「行列表」换成「封面卡网格 / 矩阵格」:`asset-card__cover` + `asset-media-cover--ratio` = 卡 + 固定比例封面;`__meta-tags` = 卡上挂标签;筛选器常驻。 +- 侧栏改可展开(`is-expand-right`),顶栏补通知与头像(我们已有头像位),分区给不同底(`app-bg--*`)。 +- ⛔ 这些**不属视觉词**(是结构与呈现),②段现在的中性块名已经放行了 ⇒ ③段可以直接画,不必再回②段。 + +## 10:0x · 🔴 用户问「说用 tiaoyue 的样式,为什么不参考它的排版布局」—— 抓到机制根因并修掉(含门禁) + +**根因(L3 取证,⛔ 不是推断)** +- ③段 `execution-runbook.md` 的 **D1 定调步骤**原写:读 `DESIGN.md` + `tokens.css` + **`components.html`**。 +- 而 `components.html` **只存在于可选档**(open-design 那 153 套:agentic/airbnb/airtable/ant/apple…);**默认档 `design-system-tiaoyue/` 里根本没有这个文件**(它给组件的是 `references/components.md` + `references/design-system.html`,全包 find 确认)。 +- ⇒ 执行者照这个名字在默认档里找 ⇒ **扑空** ⇒ 只取到了 `tokens.css`(色值/圆角/间距),**版式结构与组件族整层漏掉** ⇒ 做出的界面「用了它的样式、没有它的排版」。 +- 对照:③段 `SKILL.md` 第 49 行的供给表写的组件形态来源是对的(`references/components.md` + `references/design-system.html`)⇒ **权威处对、执行步骤处错**,典型的"两处不同源"漂移。 +- 后果实测:整个原型 `` 0/`` 0,而 tiaoyue 资产页是 `asset-card`(180 次/20 卡,带 `__cover` 封面)+ `asset-media-cover--ratio`(固定比例)的**封面卡网格**;外壳是 `sidebar-shell`/`app-sidebar`/`layout-header`/`layout-main`(9/9 页)+ `is-expand-right`(侧栏可展开)+ `app-bg--creative-workbench`(分区底)⇒ 这些一条都没用上。 + +**已修(三处,全部备份 + 跑闸门)** +1、`execution-runbook.md` §2.2 新增 **「D1 读什么」硬前置**:定调必须取**三样**(数值/版式结构/组件族),⛔ 只取数值不算取用选定套;写明默认档那套的实际文件名,并留痕这次事故(为什么照 `components.html` 找会扑空)。判据:`DESIGN.md` §2.5 组件规格**每一行都要写出处**,⛔ 只写数值不写出处即判未取用。 +2、`execution-runbook.md` 第 49 行 D1 表格行改成**指引式**(⛔ 不再写死文件名)。 +3、`scripts/check_naming.py` 的 **AUTHORITY 表加第 10 条**:「选定套的组件文件名(默认档与可选档不同名)」—— 权威处=runbook(反面留痕),其余任何 md 出现 `+ components.html` ⇒ **FAIL**。 + +**验证(含变异对照,⛔ 不拿"没报错"当验收)** +- 基线:`通过 2060 | 失败 0 | 提示 25`(+1 条新检查项)。 +- **变异对照**:向 `stage-delivery/SKILL.md`(非定义处)注入旧写法探针 ⇒ 闸门**报 FAIL**(定位 SKILL.md#129,`通过 2059 | 失败 1`)⇒ 判据**不是恒绿**;还原后回 `2060 | 0`。 +- 备份:`execution-runbook.md.bak-d1fix-20261008`、`check_naming.py.bak-auth-20261008`。 + +## 10:0x · 用户指定布局排版参照物:已上线的 mcn-work-shop(跨区只读取证) + +- 指令原文:「AGENT 工具先按照这个界面布局排版」+路径 `E:/ProgramData/AIProject/mcn-short-video/project/短视频脚本创作/V1.0/mcn-work-shop`。 +- 那是**一套真跑过的 MCN 工作台**(node `server.js 8900`,技能里也提过:用户从桌面双击 `start.bat` 起,属用户登录会话故能长跑;现测 8900 **没在听**)。前端=`public/index.html`(1.8KB)+`style.css`(56KB)+`app.js`(54KB)+`data-pages.js`(173KB),另有 30+ 个 `cdp-*.mjs`(CDP 实测脚本)⇒ 界面是**逐处实测验证过的**。 +- **提取到的布局排版**(已落 `ui/布局排版参考-mcn-work-shop.md`): + - 外壳=`.topbar`(品牌+**面包屑 `.crumbs`**+操作组)+`main#view`;**侧栏不是常驻**,只在产出浏览页出现(`.files-layout`=`.sidebar` 320px + `.content-view`)。 + - `html,body{height:100%;overflow:hidden}` ⇒ **整页不滚**,滚动只由主区承担(注释明写为消除顶栏 1px 边引发的第二层滚动条)。 + - 首页=`.func-grid`(**max-width 900 居中、单列、gap 14**)+ `.func-card`(白底+1px 边+**圆角 12**+内衬 16/18+轻阴影)+ 🔴 **`.qa-row` 问答行**(`.q` 用强调色橙、`.a` 用次级色缩进、hover 可复制)⇒ **AI 以「一问一答的行」当一等公民**。 + - 有 `vendor/echarts.min.js` ⇒ 真画图;列表项带类型标记(`.ext-md/.ext-json/.ext-xlsx/.ext-txt`)。 + - 令牌:`--bg #f5f6f8`(冷灰白)/`--primary #2f6fed`(**蓝**)/`--accent #e8590c`(橙)/`--border #e3e6ea`/圆角 12/阴影只一层 `0 1px 3px rgba(0,0,0,.08)`/正文 16px。 +- **与我们现原型的逐条反差**:外壳(顶栏+面包屑 vs 固定侧栏常驻)|首页(限宽单列卡流+问答行 vs 卡片堆说明文字)|图形(有 echarts vs svg/canvas/chart 全 0)|配色(蓝+冷灰白 vs 紫+纸白)|圆角 12 vs 24|阴影一层 vs 三层。 +- ⚠️ 待拍板:**配色要不要也换成它这套**(蓝+冷灰白),还是布局照它、配色仍留 tiaoyue(紫+纸白)。 + +## 10:1x · 用户拍板(1B 布局照 mcn-work-shop/样式留 tiaoyue;2C 先外壳+首页)—— 第一版已出,双闸门全绿 + +**已做(原型 `mcn-workbench.html`,样式令牌未动仍走 tiaoyue)**: +1. **顶栏加面包屑** `.crumbs`(「组 › 页」,照 mcn-work-shop,导航主要靠它)。 +2. **侧栏可收起**(`G-11`,`S.sideCollapsed` + `.app.side-collapsed{grid-template-columns:0 ...}`)—— 照「侧栏按需」的精神;⛔ 完全去掉侧栏不行(八页要入口)⇒ 折中为可收起,偏离已留痕。 +3. **整页不滚**(`html,body{height:100%;overflow:hidden}`,滚动只由 `.view` 承担)。 +4. **P1 补问答行**(`.qa-row`:问=强调色、答=次级色缩进,两条示例)—— 放在「全局检索与随手记」块**内**,⛔ 不新增板块(②段冻结)。 + +**三次被既有判据拦下(全是真拦,⛔ 不是做样子)**: +- ① `gap:14px`(照抄 mcn-work-shop)⇒ 自检报「间距出现未登记刻度 14px」⇒ 取登记刻度 16(差 2px 不影响形态,⛔ 不为了照抄去改判据)。 +- ② P1 套「限宽 900 单列」⇒ 一屏只装 4 行(首行顶 622px)⇒ 自检红(契约 ≥6 行/900px)⇒ **回退两栏**并留痕:**mcn-work-shop 的首页是功能入口页(卡流+问答行,不要求数据行数),P1 是矩阵数据页 —— 页型不同不能硬套,密度判据优先**。问答行形态保留。 +- ③ 顶栏按钮写在**静态 HTML** 里用了 `${...}` 模板串 ⇒ 原样显示未求值(截图抓到)⇒ 改静态文本+paint 里更新 textContent。 + +**终验**:自检 **PASS 81 / FAIL 0**;`check_skeleton.py` PASS(39 板块);P1 截图 `_scratch/p1-v3-1440.png`(顶栏:收起侧栏按钮+面包屑+演示控件+操作组,全部正常)。 + +## 10:2x · 用户再纠「左侧导航分大板块,板块功能卡片排一行,板块上方放统计」—— 照 mcn-work-shop 真实首页改 + +- 取证:之前只读了它的 CSS,漏了 `app.js` 的 `renderHome()` —— 真实首页是 **`.home-stats` 统计条(5 项:关注账号/视频解析/AI写脚本/AI脚本诊断/AI脚本评分,挂 `/api/dsh/stats`)在上 + `.data-cards` 功能卡(热点数据/账号列表/AI写脚本/脚本诊断,带图标)+ 榜单预览(tab)+ 最近脚本**。用户描述的正是这个。 +- **已落 P1**(样板):h1 之后加 ① `.home-stats` 统计条 4 项(在管账号/今日待处理/数据异动/本月已发,数据全部来自现有数据源,⛔ 没编数)② `.data-cards` 功能卡一行 3 张(矩阵总览/复盘台/记录与对账,可点跳页)。⛔ 两块都**不是 `.block`** ⇒ 不进②段骨架板块计数(机检数 `.block .block-head h2`)⇒ 骨架冻结不被破坏。 +- CSS 新增 `.home-stats/.stat-item/.stat-value/.stat-label` 与 `.data-cards/.data-card/.dc-title/.dc-desc`,全走 tiaoyue 令牌(surface/line/panel 圆角/字阶 24/16/12)。 +- 中途一处笔误(第三张卡 title/desc 顺序反了)当场自纠。 +- **终验**:自检 PASS 81/FAIL 0;机检 PASS;截图 `_scratch/p1-v4.png` —— 顶栏(收起侧栏+面包屑)→ 统计条 → 功能卡一行 → 两栏内容,正是用户描述的「板块上方统计+板块功能卡排一行」。 +- 待确认:P1 样板风格 OK 后铺开其余板块页(每个板块页顶部各放自己的统计)。 + +## 10:3x · 用户给的 Figma 设计链接 —— **取不到**(三处实证,⛔ 不是没试) + +- 链接:`https://www.figma.com/files/team/1121267380629877738/resources/community/file/1058767686059595687?...` +- ① 网页抓取只拿到**登录页**(标题 `Login | Figma`,正文是「Log in or create an account to collaborate」)⇒ 文件内容在登录后,抓不到。 +- ② 本机**无任何 Figma 凭据**:环境变量无、无 Figma CLI、`~/.workbuddy/mcp.json` 里无 figma 条目、技能目录无 figma 技能。 +- ③ 连接器市场**没有 Figma 连接器**(read-only 搜 `type=connector`,关键词 Figma/design/设计稿 ⇒ 返回 60+ 条里有 MasterGo 莫高设计、Canva、稿定、创客贴等,**唯独没有 Figma**)。 +- ⇒ 唯一能取到的路:用户给 **Figma 个人访问令牌**(走 `/v1/files/:key` 拿节点树+样式),或用户**导出 PNG/SVG、Dev Mode 复制 CSS、或直接截图**。⛔ 要凭据属红线 ⇒ 已写成待拍板项提报。:其余七页的同款改版(面包屑/侧栏收起在所有页生效,P2–P8 内容区形态仍旧);echarts 图表;封面卡网格。:P1 真矩阵、P2 缩略图卡流、P5 对照、P7 数据主视觉、图标/图表/缩略图等视觉资产 —— 骨架与闸门已就位,形态实现待派活。goal.json 的 5 条判据是按旧③段写的,重做后要按新标准重立(「高保真」判据缺口未补)。 + +## 08:1x · 主会话:工作区 git 化并首次推送(用户令「将本工作区文件夹提交到仓库」) + +- 远端:`git@ssh.alotbuy.com:admin/contentm_agent.git`(**Gitea**,SSH deploy key 认证,实测**有写权限**;push 前 `git ls-remote` 返回空 ⇒ 仓库已存在但为空)。 +- 本地:`git init -b main` ⇒ 分支 `main`;局部(⛔ 未动全局)`user.name=WorkBuddy`/`user.email=workbuddy@contentm-agent.local`(可推翻);`core.autocrlf=false`(保持文件原样,不做 CRLF 转换)。 +- 提交 `df56c2c`「初始化提交:contentm_agent 工作区全量快照」—— **1773 个文件 / 205.46 MiB pack**。分布:参考资料 1162(含 1145 抽帧 jpg + 2 个 mp4,共 231M)|执行会话 335|.workbuddy 233|归档 19|tmp 15|根脚本 5 + .gitignore + 2 份 md + docs 1。 +- `.gitignore`(新建)只排**运行时噪音** 28 个:`.workbuddy/collab/logs/`(4.4 MB 滚动日志)/`.workbuddy/*.log`/`.workbuddy/collab/*.bak*` 与 `bak-goalctl-*/`(脚本备份副本)/`.workbuddy/collab/supervise.pid`/`.workbuddy/tmp/`/退役的 `env-stamp.json.retired-*`/`tmp/_*.txt`(一次性探针)。⛔ **未打折**:参考资料 231M 全量入库(用户说"本工作区文件夹",不排除=降级目标)。 +- push 后**回读验证**(非只看回显):远端 `HEAD` 与 `refs/heads/main` 均 = `df56c2c137bb8625831829e1385189cb6580af38`,与本地 `git log -1` **逐字一致**;`git status -sb` = `## main...origin/main` 无待提交项。 +- ⚠️ 未做:`origin/HEAD` 未设为符号引用(`git symbolic-ref refs/remotes/origin/HEAD` 报 not a symbolic ref)⇒ Gitea 侧默认分支需在网页设置里确认;未建任何自动提交排期(用户未要求)。 + +## 10:4x–10:5x · 用户令「选中态老用左侧彩色边条 —— 找到源头全面移除」+ 给出 Figma 预览站 + +**一、左色条源头(L3 取证)** +- 唯一要求出处:`product-planning/references/stage-delivery/references/layouts-tooling.md` 第 234–235 行「当前项用 `border-left` 指示(3px 实底)」+示例第 205 行同款。`oil-ui-pro/references/visual-language.md` 第 73 行**正好反对**(「用单侧色条标重点…是最常见的模型默认之一,『它在表达状态』不能当理由」)⇒ 本段 runbook 的硬要求压过了反 slop 条款。 +- `check_naming.py` 的 AUTHORITY 表**没有**这条事实 ⇒ 改它不动门禁口径。 +- 产物同款:`mcn-workbench.html` 第 121/127 行(`.nav-item.is-active` 左 3px 色条)、226 行(`.list-row.is-active` inset 左色块)、371–374 行(移动端改 border-bottom 同族)。 + +**二、已改(改后复跑闸门)** +- 技能:第 205 行示例与 234–235 行判定要点 ⇒ 改成「当前项用**元素自身**表达:整块浅底 + 字重加重 + 状态词『当前』,⛔ 不用 `border-left` / `inset` 左色条」;并注明禁令权威在 oil-ui-pro 视觉语言,不复述清单。 +- 产物:三处 `is-active` 全改为 `color-mix(in srgb, var(--accent) 10%, var(--paper))` 整块底色(导航/列表/移动端),去掉 `border-left` 与 `inset` 色条,连带清掉空心占位 border。 +- ⛔ 未动 open-design 第三方素材里的 `border-left`(纪律:不改供应商件内容)。 + +**三、读数**:命名闸门 `通过 2060 | 失败 0 | 提示 25`(与基线同);原型自检 `PASS 81 / FAIL 0`;截图 `_scratch/p1-v5-noleftbar.png` 确认左色条已消失。 + +**四、Figma 预览站(用户给的入口)** +- 用户说点 preview 会打开 `https://iso-strong-13397590.figma.site/` ⇒ 实测是 **Figma Make 生成的单页应用**(标题 `AI Content Creation Platform`),**真 DOM**(21KB)+ 一张 Tailwind v4 编译 CSS(94KB)。 +- 已抓落盘 `tmp/_figma_preview/`:`preview.html`(DOM)|`preview_full.png`(整页截图)|`site.css`(CSS 源)。基座=shadcn/ui + Tailwind v4 默认主题(`--primary:#030213`、`--radius:.625rem`、系统字体);紫色强调与彩色图标属组件层。 +- 结构:顶栏(logo+Upgrade Plan+头像)→ 英雄标题+副标题 → 2 张统计卡(含进度条)→「Select AI Feature」5 张功能卡(选中那张=紫描边,⛔ 不是左色条)→ 提示词输入+Generate → 输出空态。 +- `browser-harness` 可用:`BU_CDP_URL=http://127.0.0.1:9223` + 清掉 HTTP(S)_PROXY 变量;独立 profile `bu-figma-profile`(现已登录 Figma)。⚠️ 抓取前先 `switch_tab` 到目标标签 —— daemon 当前标签可能落在别的页。 + +## 10:5x · 用户令「排查产品规划技能与 oil-ui-pro 视觉规范的冲突并全部修改」—— 全仓对撞 + +**做法**:oil-ui-pro 15 份判据全读(SKILL + 视觉语言/组件/点缀/布局视口/交互状态/动效/方向/存量/图标/素材/配图/评审/工具/风格对比),逐条反查 product-planning 三份(③段 `SKILL.md`、`execution-runbook.md`、`layouts-tooling.md`)+ 产物。 + +**硬冲突只有两处:** +1. **单侧色条**(上一轮已改)—— product 在第 234–235 行硬要求,oil 视觉语言第 73 行硬禁。 +2. **入场编排**(本轮改)—— product **硬禁**(4 处:③段 `SKILL.md`:262/`:361` 反面清单/`execution-runbook.md`:302/`layouts-tooling.md`:310);oil **硬要**(动效那份第 5–9 行「每个界面先做三处动效」,第 3 处即「首次进入的一次出场」;且把「界面完全不动」列为模型默认缺陷)。 + - 改法(4 处同口径):`⛔ 不做**逐区块**的入场编排(每块各套一次淡入上移 — oil 明列的模型默认);首次进入的**一次**协调出场按 §供给·方法主线 最简档做,一天开几十次的高频页可整段省去`。 + - 产物自检同款(`mcn-workbench.html`:1672 原写「零 @keyframes」)⇒ 改「至多一处,禁逐区块」。 + +**数值口径差(**不改值**,只在 runbook §3.4 立「差异登记」条)**:强调色占屏(本项目更严)/页内在用字号档下限(本项目更低)/同屏动效元素数量与错峰区间(本项目更紧)。写法要点:**只登记「本项目刻意收严」,一律引 §供给·方法主线,⛔ 不复述 oil 的值**(守单一可信源)。oil 那几处原文写的是「预算是起点」「不是死规定」的**软值**,故不构成硬矛盾。 + +**顺带**:`layouts-tooling.md` §1「状态用 tag 不用整行底色」与 §4「当前项用整块浅底」曾被读成打架 ⇒ 加半句区分(记录状态 vs 选中态)。 + +**读数**:命名门禁 `通过 2060 | 失败 0 | 提示 25`(与基线同);原型自检 `PASS 81 / FAIL 0`。 + +**旁证(记账)**:open-design 的 `design-templates/live-dashboard/SKILL.md`:187 本就写着「No rounded card with a 4px left-border accent」⇒ 左色条是公认的模型默认,上一轮删对了。 + +**未动**:open-design 第三方素材里的 `border-left`(纪律:不改供应商件内容)。**产物层小发现(未改)**:P1 右上角挂「假设」标记 —— oil 视觉语言第 77 行把「界面写制作说明」列为禁项(该类标记应进交付说明),但③段技能并未要求它,属产物自选,故只记录。 + +## 13:0x · 🔴 用户定供给治理口径:「oil 是基础,在这个基础上可以叠加其他设计规范」 + +**含义**:`oil-ui-pro` = **基础层**(视觉与体验的底线判据);其余各档(定调与令牌/版式骨架/工艺数值判据/本段自有 runbook 与 layouts-tooling)= **叠加层** —— 只许**更严、更具体**,⛔ 不许**放宽或推翻**基础层;冲突以基础层为准。 +**这同时否掉了上一轮的待拍板 B**(把入场编排回退成「一律不动」= 推翻基础层,不合口径)⇒ 保留 A(对齐 oil 的动效三处)。 + +**一、治理落地(唯一权威处 + 三处越权口径)** +- ③段 `SKILL.md` §供给 块新增分层规则(第 33 行,2026-10-08 定案留痕)——供给的唯一权威处,其余引它。 +- ③段 `SKILL.md` 原第 54/59/307 行写着「供给件不是规范权威…**以本段为准**/冲突处以本段与 `DESIGN.md` 为准」⇒ 与「oil 是基础」相反,**全改**成「本段自有判据是叠加层,⛔ 不许放宽基础层,只许更严」。 +- 总入口 `product-planning/SKILL.md` 第 109 行「以本项目追加条为准」⇒ 补「⛔ 追加条不得放宽基础层」。 +- ⭐ 这三处「本段越权」口径正是此前让左色条等冲突**存活下来**的机制(本段判据可压过 oil 的视觉判据)。 + +**二、收紧两处「放宽基础层」的数值(原值允许了 oil 禁止的)** +- 字号档:`≥3 档` → `4–6 档`(oil 基础=一页 4–6 级)|runbook §3.3 与 §5.1 两处。 +- 动效:`同屏动效元素 ≤3 个且有 30–50ms 错峰` → `≤2 个且有 40–80ms 错峰`(oil 基础=一两处/40–80ms)|runbook §5.2 + ③段 `SKILL.md`。 +- runbook §3.4 的「差异登记」重写:只登记**收严项**(强调色占屏 ≤5%),并写死「**放宽 ≠ 叠加** —— 想放宽得先回基础层改」。 + +**三、读数**:命名门禁 `通过 2060 | 失败 0 | 提示 25`(与基线同);原型自检 `PASS 81 / FAIL 0`(上一轮改后同)。 + +## 13:1x · 用户令「看哪些环节需要重新生成,都按新技能要求重新生成」—— ③段四份重生成 + +**受影响环节判定**:①段(research 1a–1e)与②段(prd 2a/2b)是文字与块级骨架,与视觉判据无关 ⇒ **不受影响**;只有 **③段四份**受影响(`DESIGN.md`・原型・`3b-实测记录.md`・`3c-GPT会诊.md`・`3d-审查报告.md`)。④段本项目未做,N/A。 + +**已重生成**: +- `DESIGN.md` 6 处:§〇 供给口径(方法主线 → **基础层+叠加层**)|§1.1 第 4 条入场编排判据(零 @keyframes → **@keyframes ≤1、禁逐区块**)|§2.2 强调色允许位置(去掉「左侧 3px 指示条」→ 整块浅底)|§2.5 侧栏导航项(整块浅紫底 + 字重 600)|§六 在用字号档判据(`≥3` → `4–6`)|§六 强调色取值口径(去掉「3px 左侧标条」);§七 修订记录加一行留痕。 +- 原型 `mcn-workbench.html`:上一轮已改(三处 `is-active` + 自检判据)。 +- `3b-实测记录.md` 3 处:供给口径/入场编排结论/强调色取值口径。 +- `3d-审查报告.md`:S-06 样式描述(旧写 `--surface-soft` + 左 3px `--accent`)。 +- `3c-GPT会诊.md`:R-07/R-20 两条处置的样式与 @keyframes 描述同步;⚠️ 第 54 行是**提问原文**(历史记录)**未动**。 + +**读数**:原型自检 `PASS 81 / FAIL 0`;命名门禁 `通过 2060 | 失败 0`。 + +**如实登记的两点**:① 3c 是对**旧版**的会诊,严格按技能(3c 必做、未取得外部审查≠已通过)应重跑 —— 本轮改动只在选中态与判据文字,未动会诊覆盖的交互/布局,已写成待拍板;② 标题与正文共用选定套的**系统字体栈**:字面上没踩 runbook「标题禁用 system-ui」,精神上与 oil 基础层「标题要有自己的性格」有距离 —— 已写成待拍板(补标题字体是视觉决策,不擅改)。 + +## 15:3x · 用户拍板:①3c 改成「让 GPT 生成参考版」②标题字体走方案 A + +**一、技能改动:③段 3c 由「GPT 会诊」改成「GPT 参考版」**(用户原话:「GPT 最好的用法是告诉它需求和设计风格,让它按照理解生成一版做当参考」) +- 与旧做法的实质差别:**不传我们的原型 HTML**(传了就是让它改编我们的稿、拿不到独立版本)⇒ 改成**内联②段需求 + `DESIGN.md` 定调/令牌**,要它独立出一版单文件 HTML + 开头三句话说明。 +- 产物名 `3c-GPT会诊.md` → **`3c-GPT参考版.md`**;三段式改成「提问原文 → 参考版原文(三句话+完整 HTML)→ **四列对照表**」;处置纪律改成「参考版不是命令,是参照物」。 +- 改动落点(技能包内共 15 处):`SKILL.md` §3c 全节重写 + 子步表 + 顺序句 + 完成标准 + 硬约束 + 反面清单 + frontmatter;runbook §4 全段重写 + 完成标准;总入口 `SKILL.md` 两处产物名;`scripts/check_naming.py` 的 subs 名单(`3c GPT会诊` → `3c GPT参考版`)。`references/_留痕/` 历史档⛔ 未动。 +- 读数:命名门禁 `通过 2060 | 失败 0 | 提示 25`;技能包内「会诊」已清零(只剩 `_留痕`)。 + +**二、方案 A:补标题展示体** +- `DESIGN.md` §2.3 新增「标题字体」= **展示体** `"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走选定套黑体栈);§四 Gate-1 第 6 项(反 slop)同步;§七 修订记录加一行。 +- 产物 `mcn-workbench.html`:新增 `--font-display` 令牌,应用 `h1` / `h2` / `.brand`(h3 是块内小标题,留在正文族);`3d-审查报告.md` 3 处(字号档判据 `≥3`→`4–6`、失真项、字体回退项)同步。 +- 读数:原型自检 `PASS 81 / FAIL 0`;截图 `_scratch/p1-v6-displayfont.png` 确认标题已走展示体、导航仍是黑体。 + +**未做(下一步)**:本项目的 `3c-GPT参考版.md` **尚未生成** —— 要外部 ChatGPT 会话(内联②段需求+令牌 → 取回参考版 HTML)。现有 `3c-GPT会诊.md` 是旧方法的会诊记录,保留作历史,不改名冒充参考版。 + +## 16:3x · 用户选 A(我跑 3c 参考版)—— 卡在 ChatGPT 未登录 + +- 浏览器实例在(9223 / pid 47504),`chatgpt.com` 能打开,但**那个独立实例里 ChatGPT 未登录**(页面「登录以获取…」、编辑器未出现)⇒ 这一步要用户本人登录(同 Figma 那次)。 +- 已按新 §3c 备好**提问底稿**:`ui/_scratch/3c-prompt.md` —— 内联「②段八页骨架+板块清单」+「`DESIGN.md` 定调+令牌表」+三条要求 +「先给三句话说明」;⛔ 不含我们的原型 HTML(新 §3c 硬口径)。 +- 待用户登录后:原样发出 → 等回答出完取回 → 落 `ui/3c-GPT参考版.md`(提问原文 → 参考版原文 → 四列对照表)。 + +## 16:2x–16:4x · 3c GPT 参考版跑完(用户登录 ChatGPT 后) + +**跑法**:`browser-harness` 打开 `chatgpt.com`(独立实例 9223,用户已登录)→ 把底稿(内联②段八页骨架+`DESIGN.md` 定调/令牌;⛔ 未传我们的原型 HTML)灌进 ProseMirror 输入框 → 点发送(**硬证据=输入框清空**,两次都核过)。 + +**⚠️ 踩坑(记账,下次省事)**:① 首答把 HTML 放进了**产物面板(artifact)**,源码**不在父页 DOM**(渲染壳是跨域 iframe `cdn.platform.openai.com/.../runner.html`,其 body 仅 943 字节、无嵌套帧);② 面板的「下载文件」按钮**自动化下点了不触发**(`Browser.setDownloadBehavior` 已设、坐标点击两次、下载夹为空);③ 「复制」按钮抓到的是**消息正文**不是源码。⇒ 追加一问「把完整源码贴在回复正文」后拿到:代码块是 ``(48800 字符)而**不是** `
`(该页 `pre` 计数为 0,别按 pre 找)。
+
+**产出**:
+- `ui/3c-GPT参考版.md`(67.5 KB):提问原文 → 参考版原文(开场说明 + 完整 HTML 48800 字符)→ **四列对照表 8 条**。
+- 参考版 HTML 另存 `ui/_scratch/gpt-ref.html`(可运行);整页截图 `tmp/_bh_shots/gpt-ref-full.png`。
+- 对话 URL:`https://chatgpt.com/c/6ac75440-fc60-83e8-b509-cdd6ec808200`。
+
+**参考版做了什么**:守住了我们的令牌(浅色纸感 + 品牌紫),但**骨架借了「AI 内容工作台」那套**——顶部横向一级导航(替代左侧栏)+ 居中宽内容区 + 顶栏常驻全局搜索 + 指标卡一排 + 表格化账号矩阵。
+
+**对照表里的分歧点**:⛔ 不采纳它的「首屏超大主张式标题」(基础层把工具页大标题列为模型默认)、⛔ 不采纳「涨跌用绿」(中文该涨红跌绿)、⛔ 不采纳「每卡一色」;✅ 采纳顶部导航 + 常驻搜索 + pill 状态 + 行级动作;⚠️「账号矩阵改表格」待回②段确认。
+
+**未做(下一步)**:采纳项会改外壳(顶部导航替代左侧栏、常驻全局搜索)⇒ 属③段重做,待用户拍板是否动手。
+
+## 17:0x–17:5x · 用户新三点口径落地 + 顺手挖出两个真缺陷(外壳滚不动 / 自检假绿)
+
+**用户口径(原话)**:「gpt做的的排版好看多了,但是功能入口还是卡片的形式并排放到数据下面比较好,还有AI内容营销工作台 板块很多,可以在左侧导航分大功能板块,每个板块一个主页面」。
+
+**落地的两条**:
+1. **左导航分大功能板块 + 每板块一个主页面**:`#nav` 原本**一条基础样式都没有**(只 640px 那条窄屏规则里写过)⇒ 桌面下四个板块零间距堆着,「分板块」读不出来。补 `#nav{display:flex;flex-direction:column;gap:16px}` + `.nav-group + .nav-group{padding-top:16px;border-top:1px solid --line-soft}`;每个板块**第一个页面即该块主页面**,块标题点一下直达,主页那项带「主页」小药丸。⛔ **不许把导航收成 4 项** —— 自检「侧栏八项逐项核」按八个 `G-05` 判,那是②段八页一次点击可达的落地。
+2. **P1 功能入口卡:保持卡片、并排、从统计条下面挪到「今日待处理 + 账号矩阵」之后**(数据在上、入口在下)。顺带正收益:P1 账号矩阵首屏由 **6 行 → 8 行**(首行顶 442 → 332px)。
+
+**GPT 那版排版照搬不动 —— 实测过了**:它把两块数据做成**满宽表格顺排**。照搬后(只改顺排、别的不动)账号矩阵首行顶 724px ⇒ **一屏 2 行**(契约 ≥6);再把行内第二行小字拿掉逼近单行,首行顶 621px、行距 64px ⇒ **4 行**,仍不够。⇒ 满宽表格与「一屏 ≥6 行」在两块现有信息量下不可兼得,要兼得得把每格压成一个短值(动②段定的次级信息档位)。**已写进 `DESIGN.md` §五 第 7 条与 `3c-GPT参考版.md` 对照表 item 5,未动。**
+
+**🔴 顺手挖出的两个真缺陷(都在修外壳时暴露)**:
+- **整页「滚不动」≠「不滚」**:外壳只抄了 `html,body{height:100%;overflow:hidden}`,没约束高度链 —— `.app` 用 `min-height:100vh` 跟着内容长到 **1543px**(1440×900 下 P1),`.view` clientH = scrollH(自己不滚),真正的滚动落到 **``**(实测 `body.scrollTop 435`),而 body 是 hidden ⇒ **折叠线以下永远拿不到**(异常值提示 / 本月表现最好 / 全局检索三块真机看不到)。修:`.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}`;新增判据「纵向滚动只由主区承担」+ 变异 **M14**。
+- **🔴 自检在窄视口量密度是假数(假绿)**:`guardScroll` 只复位/只核对 `window.scrollY`,而实际被滚的是 ``(`window.scrollY` 恒 0)⇒ 500×844 曾报「一屏装得下 **7 行**」,真值**连 1 行都不到**;1024×768 的「4 行」同样是假的。修:`applyScene` 复位全部三个容器(html / body / .view),`guardScroll` 改成**逐个核四个量**;**M9 的注入点从 `window.scrollTo` 重指到 `.view.scrollTop`**(原来那条已经抓不到东西,属假变异)。
+- **连带修**:两栏带 `.band` 的收线从 `max-width:1024px` 挪到 `max-width:900px`(原注释写「1024 劈两半后矩阵列不到 300px」,复测实得 **336px**,三列都不折行)⇒ 1024×900 由 4 行 → **8 行**。
+
+**🔴 连带推翻的旧结论(这条最要紧)**:`3b` / `DESIGN.md` / `3d` 里那个「密度边界 = **768px**」是**建立在假数上**的。真边界 = **901px**(= band 收线 900):1440/1280/1024 实测 8 行、1000/960/920/901 实测 7 行(✅);900 实测 3 行、768 实测 2 行、641 实测 1 行、640 实测 3 行、500×844 实测 0 行(❌,P2 在 500×844 也掉到 5 行)。⛔ **这不叫「放宽判据」,是把假绿修成真红。**
+
+**闸门终态**:原型自检 **PASS 82 / FAIL 0** @1440×900(81 → 82,多的那条就是「滚动只由主区承担」);变异对照 **14 / 14**;骨架冻结 **PASS,八页 39 个板块**;命名一致性 **通过 2060 | 失败 0 | 提示 25**。
+
+**文档同步**:`DESIGN.md`(§1① ⑤ 导航层级+主页面收口形态、§1⑨ 断点表加 `901–1024` 行+新增「滚动容器」段、§2.3 组件表加三行、§2.4 G-01…G-05、§五 第 7 条整表重测替换 + 新增第 10 条、§七 修订记录两条)、`3b-实测记录.md`(§二自检全文重落盘、§三变异 14/14、§四 37→39+新指纹、§五整表重测替换、§六新增第 16/17/18 条、§七 D1、§八门槛结论)、`3d-审查报告.md`(顶部加「2026-10-08 复核」块,逐条列旧值→新值)、`3c-GPT参考版.md`(对照表 item 1 改判不采纳 / item 4 落位调整 / item 5 卡在密度判据)。
+
+**待用户拍板(未动)**:①≤900px 宽的密度缺口(`DESIGN.md` §五 第 7 条三条出路,未选任何一条);②要不要把 P1 两块重做成满宽单行表格(=出路②,会动②段次级信息档位);③「本板块功能入口卡」这一形态目前**只落在 P1**(看矩阵复盘的主页面),要不要铺到 P2 / P4 / P6 三个主页面。
+
+**⚠️ 记账**:`2b-界面布局.md` 的 md5 指纹换过一次(旧 `1dcc69f9…` /15036 字节 /02:30 → 新 `61129a3c…` /15688 字节 /09:01)—— ②段自己动过一轮,③段手里那条指纹就旧了;**指纹只对记下来的那一刻负责**。
+
+## 17:3x–18:2x · 导航收一层 + 照抄参考版左右布局(用户两条新口径)
+
+**用户原话**:「功能入口放在 数据统计下面,还有好好看看gpt的原型设计,哪里左右布局的功能,照着抄也改抄回了嘛」+「左侧功能导航 只有大板块的导航 只有一层」+「是否应该有8个功能板块,还是有些功能应该合并到一起」。
+
+**落地**:
+1. **功能入口卡挪到「数据统计」下面**(上一轮我放在数据列表下面,理解偏了)—— P1:页头 → 统计条 → 功能入口卡 → 今日待处理|账号矩阵 → 异常值提示|本月最好(左右)。
+2. **左导航收成一层**:`NAV` 由「4 板块 × items」改成「4 板块 + home」,`renderNav` 只渲染 4 个板块项(40px、当前板块整块浅紫底+600)。**板块下的页面不再平铺** ⇒ 给 P2/P4/P6 补了功能入口卡(P2→资产库/创作台、P4→发布中心/账号画像、P6→创作台/发布中心),否则 P3/P5/P7/P8 从侧栏就断了。
+3. **照抄 GPT 原型的左右布局**(每页都有一处 `.grid.cols2` 1.35fr:.9fr):P1 异常值|本月最好、P2 评论区洞察|选题库、P4 工作区|AI产出+资产引用+版本、P6 记忆条目|关联内容、P7 左(待复盘项+表现数据)|右(归因+确认改判+回写)、P8 对账核对区|商单与收支。`.grid-main-side` 宽比 **1:1 → 3:2**,收线由 ≤640 提到 **≤900**(与 `.band` 同步)。
+4. **自检判据跟着改**:「侧栏二级页项 8 个」→「侧栏只有一层 4 个板块项」+新增「八页一次点击可达(4 板块 + 功能入口卡无缺口)」;4b 由「8 项逐项核」改成「4 板块逐项落主页面」。项数 82 → **83**。
+
+**为保住密度契约做的三处收高**(P1/P2 各一屏 ≥6 行):卡内衬 16→`12/16`;`≤1000px` 隐掉卡片描述;`≤1024` 顶栏内衬 16→8(顶栏 109→93px)。实测边界仍是 **901px**(901/920/960/1000/1024/1280/1440 全绿)。
+
+**踩过的坑(记账)**:① 在 JS 模板字符串里写 HTML 注释,注释里带 **反引号** 会把模板字面量提前闭合(`node --check` 还照样通过,因为 `` `...` `` 后跟 `.grid` 被解析成成员访问)⇒ 页面静默白屏;扫全部注释行剥反引号后正常。② HTML 注释**必须写 `-->`**,我漏写成 `*/`,把后面两张卡片行整段吞成注释(症状=P2 板块数 4≠5、P2-03 悬空)⇒ 判据当场报红才抓到。③ 卡片行紧贴数据统计下面时,它的高度**直接**转嫁给下面那张吃密度契约的列表(P2 由 7 行掉到 5 行)。
+
+**闸门终态**:自检 **PASS 83 / FAIL 0** @1440×900;变异对照 **14/14**;骨架冻结 **PASS 八页 39 板块**;命名一致性 **通过 2060 | 失败 0 | 提示 25**。
+
+**我的判断(8 板块问题)**:8 页不建议合并(每页一个唯一主操作,②段逐页判过;合了就是两个主操作塞一页)。真正立不住的是把「账号画像(跨组)」当第 4 个**板块** —— ②段 §三 自己写的是「(跨组)」,它是跨页工具不是板块。已把这个作为待拍板项交用户。
+
+
+---
+
+## 18:2x–18:3x · 导航改 tiaoyue 图标栏 + 八页统一 P1 页壳 + 主列表表格化(第三轮)
+
+用户两条口径(同一轮):「**左侧导航参考 tiaoyue 的导航**」+「**每个板块的首页 样式参考 MCN工作台首页**」。
+
+**取材(不猜)**:翻 `design-system-tiaoyue` 的 `library.json` / `components.md` / `SKILL.md`,tiaoyue 的导航解剖有 5 条独立证据 —— `app-sidebar` 宽 `w-16`=**64px**、每页 `nav-item`×9 + `nav-icon`×9 + `nav-tip`×9(**一项一图标一提示、没有文字标签族**)、提示是 viewport 级浮层 `nav-tips-layer`/`nav-tips-viewport` + `is-expand-right`。⇒ 落地成 64px 图标栏。
+
+**决策(我定的,可推翻)**:名字从「常驻」挪到「悬停/聚焦时向右浮出」——因为 64px 放不下中文名,tiaoyue 也是这么干的。**≤640 的窄屏例外**:没有悬停 ⇒ 转成**带名字的横滚标签条**(把用户先前要过的「看得见短名」保住)。
+
+**产物改动**(`ui/mcn-workbench.html`):
+- `--nav-w` 240px → **64px**(去掉 1024 断点的 200px 覆盖);`.nav-flat` 全套换成 `.nav-item`(44px 项 + 20px 图标),新增 `.nav-tips-layer`/`.nav-tip` 视口级提示浮层 + `showNavTip()/hideNavTip()`(mouseover/mouseout/focusin/focusout/resize/scroll 六个入口);品牌位收成 32px 方标「营」。
+- 八页统一页壳:页头 → `.home-stats` 统计条 → `.sect-nav` 功能入口卡 → 满宽表格主数据块 → 一处 `.grid-main-side` → 尾块。P3/P5/P7/P8 补统计条与入口卡;P4/P6 的入口卡挪到统计条下面。
+- 主列表表格化:P2 对标内容 / P3 资产条目 / P5 发布记录 / P6 账号列表 / P7 待复盘 / P8 发布记录 —— 一律 `.ds-table.tbl-dense` 满宽;新增 `.tbl-side`(栏内表,不套 nowrap)与 `.btn-micro`(22px 行级动作)。
+- P1 两块由**并排**改成**满宽顺排**(照参照物),行高 67px→**31px** ⇒ 6 行守住。
+
+**踩过的坑(记账)**:
+① **模板字面量里写 HTML 注释,注释里带反引号** —— 老毛病又犯(`` `.home-stats` ``),把 P2 的模板提前闭合 ⇒ 页面报 `stats is not defined`、自检没跑完;已剥掉反引号。⇒ 改完必须扫一遍「HTML 注释里有没有反引号」。
+② **顺手挪动作位置**:把 P3-03「入库」从单条详情搬进表格行尾 ⇒ 表格只渲染当前分区的行,P3 场景选中的 as3 不在角度分区 ⇒ 自检判「声明了但页面上没有」。**已搬回详情**(门禁说明长在那里,动作与说明不该拆开)。教训:**形态改版不等于授权挪动作**。
+③ **两条变异悄悄失效**:M2「找不到注入点、跳过」、M8 注了不报红(都因为判据形态变了,注入点还指在旧的 `.list-row`/`.action-cell` 上)⇒ 假对照比没有变异更坏。已重指注入点,`mutate_test.py` 会把「找不到注入点」显式报成 ⚠️。
+
+**反直觉实测,值得记**:同一个 768px 视口,侧栏 240px 时 P1 首行顶 816px(**2 行**);收到 64px 后 668px(**7 行**)。⇒ **主区越窄,密度反而越差**(功能入口卡会被挤成两行),「侧栏收窄」与「守住密度」是同向的。
+
+**闸门终态**:自检 **PASS 83 / FAIL 0** @1440×900;变异对照 **14/14**;骨架冻结 **PASS 八页 39 板块**;命名一致性 **通过 2060 / 失败 0 / 提示 25**。
+**密度边界**:由 901px **下移到 768px**(≥768 全绿;640 起 P1 5 行、500×844 −1 行 ❌)。⛔ 判据一字未改、`needRows=6` 写死,两个窄视口的 FAIL 原样留着。
+
+**文档同步**:`DESIGN.md`(§1① ⑤ 导航层级与侧栏形态、§1 ⑨ 断点表、§2.3 脚手架、§2.5 换成六行组件、§2.4 G-05、§五 第 7 条整表重测、§六 五处旧值、§七 新修订行);`3b-实测记录.md`(§二 自检全文整段重落盘、§三 变异 + M2/M8 说明、§五 密度表整表、§六 新增 21/22 条、§七 D1、§八 结论);`3c-GPT参考版.md`(item 1 改判「结构采纳、载体不采纳」、item 4 扩到八页、item 5 改判**已采纳**、新增 item 10 导航短名);`3d-审查报告.md`(第三轮复核块 + §三 B-15、§六 6.1/6.2/6.3、§八 三处数字**当场改掉**,不让新旧两个数在同报告里并存)。
+
+**待用户拍板**(沿用):≤640px 宽的密度缺口三条出路(A 支持下限写 ≥768px / B 压列 / C 动外壳)一条未选。
+
+
+---
+
+## 18:3x–18:5x · 顶栏清杂项(用户:页面顶上弄这么多乱七八糟的东西 是那个技能那个规则引起的 需要详细排查 定位 删除)
+
+**排查结论:顶栏原有 7 项,没有一项是技能规则要求的。**
+
+1、`收起侧栏`(G-11)—— 无技能规则。来源是我自己写的 `ui/布局排版参考-mcn-work-shop.md`(§一「侧栏只在需要时出现」+ §五 落地清单第 1 条)。它是**参照物笔记,不是规则文件**。
+2、面包屑 —— 同上来源(§一「导航靠面包屑,不靠固定侧栏」),且**与页头 h1 重复**。技能包唯一提到面包屑的是 `layouts-tooling.md` §1:「**< 4 项**改用页头横向导航或面包屑」——那是「导航项少于 4 项时」的替代方案,我们 8 项,不适用。
+3、演示 · 账号(G-07)—— 无来源,我造的原型件。
+4、演示 · 状态(G-09)—— 规则原文(`stage-delivery/SKILL.md` §3d「状态由**路由与演示开关**驱动」/`execution-runbook.md` §3.4「**路由 + 演示开关**」)是**并列可选项**;要守的是「不用 `?state=`」+状态可见,路由那条已完整覆盖(`#/p/p4/empty` 直达,六态帧与自检 48 组都靠它)。
+5、顶栏 `全局检索`(G-10)—— ②段 P1 第 5 板块是「**全局检索与随手记入口**」,是**页内板块**;②段 §286 只把**随手记**定为全局可达。⇒ 顶栏那颗是重复。
+6、`假设 2 项`(G-08)—— 来源是我自己写的 `DESIGN.md` §三,而且是**第二处**(主兑现是板块标题行的徽章)。选**改挂**:徽章本身可点 → 打开同一个假设浮层。顶栏干净了,复核人/时机/落点一个没丢。
+7、`随手记`(G-06)—— **②段硬要求**(`2b` §59 + §286:「随手记出现在任意页面一次点击内,F2 是 P0,不能埋在两层下」)⇒ 必须挂全局外壳,**留**。
+
+**处置**:顶栏收成「产品名 + 随手记」两项;内衬 16→8 ⇒ **49px**(原 69px,≤1024 折行时 93px),且任何宽度都不折行。
+**连带清掉的代码**:`.crumbs` 全套 / `.app.side-collapsed` / `.demo` + ≤1000 与 ≤1024 的三处顶栏补丁 / `.topbar-label` / `.switch` / `#account-pick`+`#state-pick` 填充 / `change` 监听 / `S.sideCollapsed` / `renderCrumbs()`。
+**门禁随之变化**:交互 ID 79→**76**、真驱动 75→**72**、`data-act` 出现 750→**638**;自检仍 **PASS 83/FAIL 0**、变异 **14/14**、骨架 **八页 39 板块**、命名 **2060/0**。
+
+**顺带修正一处旧账(重要)**:P2「对标内容列表」第三轮已由行式列表改成满宽表格(行距 31px),但我上一轮**没把文档里的数字跟着改** —— 它实际容量是 **14 行**、任何视口都达标(500×844 也有 8 行)。旧文档里「P2 6/7 行、500×844 下 P2 也不达标」全部作废。⇒ 现在**只有 P1 在 ≤640px 不达标**。
+
+**两条纪律(已写进 3d §十)**:①别再把「参照物产品的习惯」当需求搬进外壳 —— 6 项里有一半是这么来的;②撤销一个交互 ID 必须**同时删掉它的 DOM**,否则「页面上每个 data-act 都在清单里」会报红(本轮实测过)。
+
+**文档同步**:`DESIGN.md`(§2.4 删 G-07/09/11 + G-08 改挂徽章 + 表下「已撤销的 7 个 ID」;§三 兑现方式;§1 ⑨ 断点表;§五 第 7 条第四轮整表重测;§六 三处旧值;§七 新修订行);`3b`(§二 自检全文重落盘 + 补回被吃掉的汇总行;§五 密度表第四轮整表;§六 新增第 23 条;§八 结论);`3c`(item 2 改判:顶栏常驻搜索撤掉,检索留 P1 页内);`3d`(第四轮复核块;§三 B-15;§六 6.1/6.2/6.3;§八/§九 数字;**新增 §十 顶栏杂项来源排查**;§四 S-12 改判)。
+
+
+---
+
+## 19:5x–20:2x · 组件口径统一(用户:参考 MCN工作台首页各组件样式 优化各功能页面首页组件样式)
+
+**查出三套「选中态画法」+ 两处内联字号**,已统一成一套并加判据看住。
+
+1、侧栏当前项:浅紫底(`.nav-item.is-active`)—— 原本就对。
+2、**分段控件**(P2 选题库分组 / P3 分区 / P5 账号多选 / P5 平台多选 / P5 版本 tab **五处**):原来是 `.btn btn-sm` + **内联** `style="border-color:var(--ink);font-weight:600"` —— 第三套画法,且靠内联样式铺。
+3、**表格当前行**(P3/P6/P7/P8 **四处**):原来是**内联** `style="color:var(--accent-text)"`。
+4、**字号内联覆盖两处**:P7 三个数硬顶 `--fs-20`(用的还是 `.grid-cards` 那个 P1 不用的容器)、P4 统计条的「/7」。
+
+**处置**(全部落地):
+- 新增四个组件:`.seg`/`.seg-item`(选中项 `.is-on` = 浅紫底 + accent 文字 + 600 + 描边转 accent)、`.field`(字段间距,替代内联 margin)、`.cell-name.is-on`(表格当前行)、`.seg` 里 `.num` 继承字色。
+- 五处分段控件 → `.seg-item.is-on`;四处表格当前行 → `.cell-name.is-on`;P7 三个数 → `.home-stats`/`.stat-item`(与 P1 统计条同一套);P4 去掉「/7」内联字号。
+- P8 对账核对区表:宽松档 `.ds-table` → `.tbl-side`(全站表格只剩 dense 与 side 两档)。
+- 行级动作统一 **`.btn-micro`(22px)**:P2-06/07/09/10、P4-05/08(原来 32px 的 `.btn-sm`)。
+- P7 待复盘表最后一列表头补上「播放」(原来是无表头的 cell-act,语义错位)。
+
+**新增判据 + 变异(关键)**:自检加第 **84** 项「组件口径」——八页里 `[style*=border-color]`/`[style*=color]`/`[style*=font-size]` 出现次数都为 0(⚠️ 只查这三样,`margin-*`/`flex`/`justify-content` 这类一次性布局内联是允许的,硬按「内联为 0」判会把正常布局一起判红)。配 **M15**(把 P2 分组改回内联写法 ⇒ 必须报红)证明它不恒绿。
+
+**闸门终态**:自检 **PASS 84 / FAIL 0**;变异 **15 / 15**;骨架 **八页 39 板块**;命名 **2060 / 0 / 25**。
+**落位未变**(P1 324/605/886/1119、P2 143/380/661/1009),密度仍是 P1 688px/6 行、P2 462px/14 行、顶栏 49px。
+
+**踩的坑(第 3 次了)**:模板字面量里的 **HTML 注释带反引号**(``.home-stats`` / `style="font-size:..."`)→ 页面 `Unexpected identifier 'style'`、静默坏掉,而 `node --check` 只在提取 script 后才报。⇒ 以后改完**必须**跑:「提取 script 到临时 .js → node --check」+「多行扫描 script 区内所有 `` 块里有没有反引号」。
+
+**文档同步**:`DESIGN.md`(§1.1 ⑩ 新增第 6 条拒绝项;§2.5 新增四行组件;§四 Gate-1「共 5 条」→「共 6 条」;§六 新增「内联样式越权」实测行;§七 新修订行);`3b`(§二 84 项全文重落盘;§三 15/15;§六 新增第 24 条;§七 D1;§八 结论);`3d`(第五轮复核块;Gate-3 数字)。
+
+
+---
+
+## 20:0x–20:4x · 学参照物的组件细节(用户:MCN工作台 里面每个组件的 样式高度 ICON 都是需要学习的,比如功能入口,感觉没有学到细节)
+
+**先纠了一次口径**:我上一轮把「MCN 工作台」理解成我们自己的 P1 首页,用户明确「我说的是 MCN 工作台 不是 GPT」⇒ 参照物 = **mcn-work-shop(已上线那套)**,源码在 `E:/ProgramData/AIProject/mcn-short-video/project/短视频脚本创作/V1.0/mcn-work-shop/public/`(只读,⛔ 未改对方文件)。
+
+**逐件回源站量到的关键值**(`style.css` 行号 + `app.js` 生成函数):
+1、功能入口卡 `.data-card`(`style.css:387-392` + `app.js:332-336`)—— 名字与我们**同名**(从笔记照抄来的),但细节几乎全丢:它有**三个子元素**(`.data-card-icon` / `-title` / `-desc`),图标是 `svgIcon(icon, **22**)` ⇒ **22px 单色图标**;卡内 `flex column; gap 6` 三段纵向;内衬 `16px 18px`;标题 `17/600`;描述 `14`;网格 `minmax(200px,1fr)` gap 14;hover = 描边转主色 + **`translateY(-2px)`** + 彩色阴影。
+2、图标系统 `svgIcon()`(`app.js:196-207`):`viewBox 24` / `fill none` / `stroke currentColor` / **`stroke-width 2`** / 圆头圆角;尺寸用法 卡 22 / 功能卡标题 18 / 按钮 16;颜色走 `ICON_COLORS`(**8 个图标 8 个色相**)。
+3、统计条 `.home-stat-item`(`style.css:383-386`):**无框**,`flex:1; padding:2px 12px; border-right:1px solid rgba(主色,.16)`;值 **26px/700/主色**;标签 13。
+4、问答区:`.qa-row{padding:6px 8px; font-size:15px}`;可复制行 hover 出 📋;`.func-card .qa{**border-top:1px dashed**; padding-top:8px}`。
+5、顶栏 `.topbar{padding:10px 20px; gap:20px}`(约 52px);`.ghost{padding:6px 14px; radius 8}`;`.panel{padding:24px}`。
+
+**本轮落地**(产物):
+- **功能入口卡补图标**:17 张卡全部改成「22px 图标 + 标题」一行 + 描述一行。图标=**目标页自己的图标**(复用侧栏那 8 个 `NAV_ICON`),⛔ 不另造图标库 ⇒ 同一目标在侧栏与卡片上长得一样。抽出唯一出口 `navSvg(page,size)`。
+- **图标线宽 1.7 → 2**(学参照物的 lucide 标准),侧栏与卡片一起改。
+- 网格最小宽 180 → **200**;hover 补轻阴影 L1;⛔ 不做 `translateY(-2px)` 抬起(本项目动效纪律)。
+- P1 问答区加**虚线分隔** `.qa-block`。
+- **形态取舍(重要)**:参照物首页那 4 张卡是「图标 / 标题 / 描述 三段纵向」,我改成「图标+标题同行、描述在下」—— 三段纵向卡高约 **92px**,P1 首行顶会顶到 722px ⇒ 一屏只剩 5 行(破密度契约)。⚠️ 而且「图标+标题同行」**正是参照物自己的 `.func-card h3{display:flex;align-items:center;gap:8px}` 写法**,不是我编的。
+
+**三条刻意不学**(写进文档,理由齐):它的冷灰蓝品牌色 / 8 色相图标 / 圆角 12px 体系。
+
+**新增第 5 个门禁 `_tools/check_js.py`**:抠 `
-
-```
-
-⇒ 截图通道原样等于视口,dump-dom 通道要补回被扣掉的 16 / 95。`cap.py` 已按模式分开算,并且**每次截图后直接从 PNG 的 IHDR 读真实像素跟目标视口比**,不等就当场报红 —— 这条守卫是补回来的,因为本轮之前所有截图都比标称大 16×95(「1440×900」实际是 1456×995)。
-
-## 六、本轮修掉的真缺陷(每条:现象 → 根因 → 证据)
-
-| # | 现象 | 根因 | 证据 |
-|---|---|---|---|
-| 1 | 整份设计系统在屏幕上失效 | 样式表顶部注释里 `--t-*/--raw-*` 的 `*/` 提前闭掉注释,吞掉整个 `:root` 令牌块 | 修复后对比度取证才量得出来 |
-| 2 | 全表行分隔线一直没画出来 | `.list-row:first-child{border-top:0}`:每行都包在 `
  • ` 里,于是**每行都是自己 `
  • ` 的 first-child**,`borderTopStyle` 全是 `none` | 变异 M10;另修了判据除数为 0 时恒 PASS(比值 `Infinity`) | -| 3 | 浮层不浮 | `#layer-root` 与 `.layer` 都没有定位样式,浮层渲染在文档流末尾,得滚到页尾才看得见 | 改为遮罩 `fixed inset:0` + 层本体 `fixed` 居中 | -| 4 | 行高随文字长短乱跳(66/82/100px) | 状态标放在操作列把 `auto` 列撑宽,只有那一行折行 | 状态标移到名称旁;再加「行内每段不许换行 + 省略号」;判据新增「行高齐」 | -| 5 | 自检在窄视口给出假 PASS「装得下 10 行」 | 驱动几百次点击后浏览器为聚焦元素自动滚动,`rect.top` 变负,容量公式虚高 | 加「量尺寸时页面在滚动零点」守卫 + 变异 M9 | -| 6 | 手机导航「既不是一条、也没滚动」,占 161px | `.sidebar` 只给了 `flex-direction:row`,可导航分组挂在 `