Files
mcn-short-video/.workbuddy/memory/2026-08-31.md
T

474 lines
73 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-08-31 工作日志
## 工作台首页顶部「数据预览」条带(09:34-09:50)
- 用户需求:「工作台首页顶部增加数据预览 参考插件MCN工作台首页顶部的数据预览」→ 参考源确认 = `D:\dshworkspace\plugin_package\dsh-plugin-mcn`(本机源码唯一含 mcnNav_stats 的实现,非线上 agentos)
- **参考实现**(dsh-plugin-mcn client.js + index.js):首页 home 视图顶部 stats 条带(浅蓝底 rgba(65,118,230,.07)、圆角 12、padding 22px 0),5 项 statItem(flex:1 竖排 value 28px 粗体品牌蓝 + label 13px 次级色、item 右侧细边框分隔、末项无边框);数据 `GET /mcn/api/stats`(后端 60s 缓存):accounts=hot_accounts del_flag=0 / analyses=account_video_analysis 计数 / rewrites=rewrite_log done+script_text 非空 / reviews=script_review type='ai'+done / writingScore=最新 20 条 AI 复盘 total 平均(1 位小数)
- **移植改动**:①dsh-data.js `getStats()` 修正对齐参考——reviews 补 `type='ai'` 限定、writingScore 由「计数」改为「最新 20 条 AI 复盘平均分」(无数据返回 null);②app.js renderHome `.home` 顶部(data-cards 前)加 `#homeStats` 条带占位 + 新增 `loadHomeStats()`(挂载 fetch /api/dsh/stats 一次,5 项 label 与 dsh 一致,失败显示「数据不可用」)+ router home 分支与 _reload 调用;③style.css 新增 `.home-stats/.home-stat-item/.home-stat-value/.home-stat-label`(工作台品牌色 --primary #2f6fed 对应 dsh 的 #4176e6,背景 rgba(47,111,237,.07))
- **验证**(CDP #/ 强制刷新):5 项渲染值 热门账号7/视频解析12/AI写脚本17/AI写作复盘1/AI写作评分86.5 与接口一致 ✅;样式 computed 全符合(bg .07 蓝、圆角 12、值 26px 700 品牌蓝、item 右分隔线、末项无)✅
- ⚠️ **坑**:CDP `Page.navigate` 到仅 hash 不同的 URL(#/ranking→#/)**不触发文档重载**,CSS/JS 仍是旧版(表现为新增样式全部 computed 为默认值)→ 必须补 `Page.reload({ignoreCache:true})`;服务端 dsh-data.js 改动需**重启 node 服务**(进程级 require 缓存)
- 验证脚本保留 `cdp-verify-homestats.mjs`(结构+值+computed 样式测量,可复用)
## 首页账号周榜预览表:5 数值列加宽 + 功能列「分析」→「关注」(09:42-09:55)
- 用户澄清:要加宽的是**工作台首页的账号周榜预览表**(非 #/ranking 功能页——上轮 08-28 加的是功能页,本轮补首页预览表)
- **改 style.css**(`.rank-row` grid):`grid-template-columns: 34px 84px minmax(80px,1fr) 52px repeat(4,58px) 72px` → `... 88px repeat(4,84px) 72px`(综合得分 52→88、4 个数值列 58→84)
- **改 app.js**(loadRankingPreview 行模板):非 inDb 账号操作按钮「分析」→「关注」(title「分析该账号并加入账号列表」→「关注该账号并加入账号列表」;行为不变仍 confirmSaveAccount 保存并分析);inDb 账号保持「查看」
- **验证**(CDP #/ 强制刷新实测):5 列宽 score=88 / 4×rk-num=84 ≥80 ✅;按钮「关注」+ title 正确 ✅;10 行数据正常、首页 stats 条带与快捷卡片不受影响 ✅
- ⚠️ 验证脚本坑:flex/grid 行内同类元素取列宽用 `:nth-child(n)`(按子元素序号),**不能用 `:nth-of-type`**(按元素标签类型 span 计数会错位);rk-num 是行内第 5-8 个子元素
- 验证脚本保留 `cdp-verify-rankpreview.mjs`
## 账号周榜全部页面数值列「窄 + 右对齐」(09:50-10:05)
- 用户需求:「账号周榜 全部页面 这些列宽度可以窄一些 右对齐:综合得分/粉丝/新增粉丝/新增点赞/新增评论/新增分享」
- **功能页 #/ranking**:①data-pages.js WIDE 集合补 `followers`(6 列)、数值列 td 加 `num` 类(综合得分 `num score-cell`);②style.css 根因排查——`width:100%` auto 布局下列需求总和(≈994px) < 容器(1440px),富余空间按比例摊薄拉宽每列,**min-width 只是下限压不住拉伸**(实测 110px 是摊薄结果,thMin 已 90px 却无效)→ 解法:周榜表单独 `table-layout: fixed` + 数值列 `width:90px` 硬约束(fixed 下 width 生效、min-width 忽略),排名 40/赛道 90/功能 85 固定,账号列吃剩余;table 加专属类 `table-rank`(避免影响账号列表等其他 .table 页面);td.num 缩 13px + tabular-nums + padding 8px
- **首页预览表**:`.rank-row` grid 列宽 88/84 → **76/76**(grid 本来就是硬约束,仅缩窄;右对齐原本就有)
- **验证**(CDP 实测):功能页 6 列全部 **90px + th/td 右对齐** ✅;首页 5 列 76px 右对齐 ✅;行数据/账号列自适应正常
- ⚠️ 两个坑:①`.table th { text-align:left }` 特异性(0,1,1) 压过 `.th-wide`(0,1,0),需写 `.table th.th-wide`;②auto 布局富余空间摊薄是「列宽压不住」的真根因,fixed + width 才是硬约束
- 验证脚本保留 `cdp-verify-ranknarrow.mjs`(功能页+首页双测)
## 「AI写作复盘」→「AI脚本诊断」改名 + 首页周榜列表上底色(09:56-10:08)
- 用户需求:①「AI写作复盘」包括功能入口和数据预览名称都改为「AI脚本诊断」;②账号周榜列表内容区域上底色(原来透明与页面背景 #f5f6f8 同色很奇怪)
- **改名 7 处全量替换**(app.js 6 + data-pages.js 1):首页快捷卡片 title('flask')、数据预览条带 label(占位 HTML + loadHomeStats 两处)、CRUMB_TITLES、router titles、reviews 页 page-title、代码注释;index.html 无「复盘」字样;「AI写作评分」按用户范围保持不改;页面内部功能描述(复盘报告等)保持
- **底色**:`.rank-preview-list` 补 `background: var(--panel); box-shadow: var(--shadow);`(白色面板 + 阴影,与快捷卡片一致;功能页 .table-wrap 本就有 panel 白底)
- **验证**(CDP 实测):数据预览 label 与快捷卡片均为「AI脚本诊断」✅;全页无「AI写作复盘」残留 ✅;周榜列表背景 rgb(255,255,255) ✅;#/reviews 标题「AI脚本诊断」✅
- 验证脚本保留 `cdp-verify-rename.mjs`
## 周榜功能列按钮统一白底带边框(09:58-10:10)
- 用户需求:「账号周榜 功能列的按钮都改为 白底带边框」
- **改 style.css** `.btn-import`(功能页「分析」+ 首页「关注」共用):灰底 #f0f2f5 → **白底 #fff + 边框 #d0d4da**,hover 变主色边框+主色字;`.btn-view`(查看)本就是白底+主色边框未动
- **验证**(CDP 实测):功能页「分析」白底 rgb(255,255,255)+边框 #d0d4da ✅;首页「关注」同 ✅
- 验证脚本保留 `cdp-verify-btnwhite.mjs`
## 首页周榜预览改 tab 切换 + 新增 3 个空榜(10:02-10:15)
- 用户需求:「首页账号周榜 改为 tab切换,新增 作品热榜、点赞日榜、涨粉日榜,功能先空着」
- **改 app.js renderHome**:`<h3>账号周榜</h3>` → `.rank-tabs` 4 个 `.rank-tab`(账号周榜 week 默认 active + 作品热榜 hot + 点赞日榜 likes + 涨粉日榜 fans),工具条保留(id=rankTools);内容区新增隐藏的 `#rankPlaceholder` 占位块
- **改 app.js router home 分支**:`.rank-tab` 点击切换 active;week → 显示 #rankTools+#rankPreviewList、隐藏占位;其余 → 隐藏工具条和列表、占位显示「『XX』建设中,敬请期待」
- **改 style.css**:`.rank-tabs/.rank-tab/.rank-tab.active/.rank-placeholder`(胶囊 tab:白底边框,active 主色蓝底白字;占位:虚线框+白底居中灰字)
- **验证**(CDP 实测):4 tab 初始状态 ✅;逐个点击 3 新榜 → 工具条/列表隐藏 + 占位文案正确 ✅;点回账号周榜恢复列表+筛选 ✅
- 验证脚本保留 `cdp-verify-ranktabs.mjs`
## 首页周榜 tab 选中样式:深蓝胶囊 → 浅底色 + 下划线(10:16-10:25)
- 用户反馈:「tab 能不能不要用 深蓝色选中,这是哪来参考的样式,太抢眼了,就用下划线效果 浅底色就行」
- 首版 `.rank-tab.active` 沿用顶部主导航 `.tab` 的深蓝胶囊样式(白字+深蓝底 #2f6fed),用户嫌抢眼
- **改 style.css**:`.rank-tabs` 补 `border-bottom:1px solid var(--border)`(tab 栏底部分隔线,浅色方案基础);`.rank-tab` 透明背景 + `border:none` + `border-bottom:2px solid transparent`(下划线占位防切换抖动)+ 次级色文字;`.rank-tab.active` = `background:var(--primary-soft)`(#eaf1fe 浅蓝底)+ `border-bottom:2px solid var(--primary)`(主色下划线)+ 主色 600 字重;hover 同浅底主色
- **验证**(CDP 强制刷新实测):active computed bg=rgb(234,241,254) / color=rgb(47,111,237) / border=2px solid rgb(47,111,237) / weight=600 ✅;非 active 3 个 tab 全透明背景 + 透明下划线占位 + 次级色文字 ✅;4 tab 切换/回切 active 样式均正确 ✅
- ⚠️ 验证脚本坑:querySelector 传入元素对象(不是选择器字符串)会报 `'[object HTMLButtonElement]' is not a valid selector`
- 验证脚本保留 `cdp-verify-tabstyle.mjs`
## 首页周榜 tab 改名(10:10-10:15)
- 用户需求:「把点赞日榜 和 涨粉日榜 去掉日,作品热榜 改为 视频热榜」
- **改 app.js renderHome**:tab 按钮文本 `作品热榜`→`视频热榜`、`点赞日榜`→`点赞榜`、`涨粉日榜`→`涨粉榜`(仅文案,`data-rank-tab` 值 hot/likes/fans 不变)
- router 切换按 `data-rank-tab` 匹配 + 占位文案动态取 `t.textContent`,故只改按钮文本、占位自动跟随
- **验证**(CDP 强制刷新实测):4 tab 名称 账号周榜/视频热榜/点赞榜/涨粉榜 ✅;逐一点击占位文案「视频热榜/点赞榜/涨粉榜」建设中 ✅;回切账号周榜恢复列表 ✅
## 账号列表「导入」→「添加」+ 弹窗精简(10:13-10:22)
- 用户需求:「账号列表中 导入功能名称 改为添加,点击按钮弹窗 名称改为 添加账号数据,输入项去掉 方式二和抖音号输入」
- **改 data-pages.js**:accImport 按钮「导入」→「添加」,title「添加账号数据(抖音账号信息 / 账号地址)」
- **改 app.js openImportAccounts**:弹窗标题「添加账号数据」;删除方式二整块(本地文件夹路径输入 + data-imp-dir)与抖音号输入(data-imp-did);说明文字去「方式一:」前缀(只剩一种方式);提交按钮「提交导入」→「提交添加」;提交逻辑清理——去掉 dir/did 分支,校验改「请填写账号名称或账号地址」,prompt 只含名称/地址,executeTask label '导入指令'→'添加指令'
- **改 style.css**:注释「导入账号弹窗:方式一账号信息 / 方式二本地文件夹」→「添加账号弹窗:账号信息(名称/地址)」
- 保留:账号详情页 infoGrid「抖音号」展示字段(非输入项)、帮助页「导入账号」自然语言用法(用户未要求)
- **验证**(CDP #/accounts 强制刷新实测):按钮「添加」+ title ✅;弹窗标题/2 个输入项(账号名称+账号地址可选)/提交添加/无方式二·文件夹·抖音号 ✅
- ⚠️ 验证坑:`document.querySelector('.modal')` 取到的是**页面加载时自动弹出的「项目文件地址」设置弹窗**(index.html 既有行为,非本次引入)→ 需取最后一个 `.modal-mask` 才是新开的弹窗
## 添加按钮图标:download → user-plus(10:15-10:18)
- 用户需求:「按钮前面 图标也要改」——「添加」按钮前是下载图标(导入语义残留),需换贴合「添加账号」的图标
- **改 app.js**:ICON_PATHS 新增 `'user-plus'`(Lucide 标准:人像 + 右下加号);弹窗标题图标 `svgIcon('download', 18)` → `svgIcon('user-plus', 18)`
- **改 data-pages.js**:accImport 按钮图标 `svgIcon('download', 15, 'currentColor')` → `svgIcon('user-plus', 15, 'currentColor')`
- **验证**(CDP 实测):按钮/弹窗标题图标均为 user-plus、无 download 残留 ✅
- ⚠️ 验证坑:查弹窗图标前必须先 click 打开(否则取到的是页面自动弹出的设置弹窗,无 h3)
## AI写脚本页操作列按钮:「AI改写」→「AI写脚本」+ 样式统一(10:19-10:22)
- 用户需求:「AI写脚本 列表页 操作列改名功能,按钮样式参考 账号列表中功能列按钮样式」
- **背景**:账号列表(#/accounts)操作列按钮本就是「AI写脚本」(`btn btn-sm` 白底灰边框 → confirmAiScript);AI写脚本页(#/rewrites)操作列却是「AI改写」(`btn btn-sm btn-view` 主色边框 → confirmRun 改写),两处语义不一致
- **改 data-pages.js renderRewrites 行模板**:`<button class="btn btn-sm btn-view" data-rewrite=...>AI改写</button>` → `<button class="btn btn-sm" data-rewrite=...>AI写脚本</button>`(文案统一 + 去掉 btn-view 改白底灰边框,与账号列表操作列一致)
- **验证**(CDP #/rewrites 强制刷新实测):按钮文本「AI写脚本」✅、class=btn btn-sm 无 btn-view ✅、白底 rgb(255,255,255)+灰边框 #e3e6ea+灰字 ✅(20 行全部生效)
- 未改:视频详情页(298 行)与账号详情页的「AI改写」按钮(用户仅指定 AI写脚本列表页)、弹窗标题「改写脚本」
## 旧梦留声机账号设定卡(SVG 信息图,10:23-10:30)
- 用户需求:参考《权游》影视需求 Skill 信息图,用「旧梦留声机」账号设定生成同款设定卡
- **数据源**:`C:\Users\maidou\Desktop\MCNSkill项目\旧梦留声机\旧梦留声机账号设定.md`(群像账号:六内容基因/六段式情绪核弹/角色类型库6类/红线6条/色彩体系/内容路线六步闭环)
- **产出**:`旧梦留声机账号设定卡.svg`(同目录,680×990 竖版信息图,show_widget 同步内联渲染)
- 结构映射(对齐权游 12 模块):标题+类型+情绪锚点 → 内容路线6步流程条 → 核心气质8chips → 六大内容基因6卡 → 色彩体系5色卡(泛黄旧时光/冷灰乡土/暖黄回忆/冷白危机/明亮都市)→ 角色类型库6卡(含记忆符号)→ 六段式情绪核弹结构(柱状曲线+时长占比)→ 红线清单6条
- 视觉语言:暖黄旧时光色系(c-amber #FAEEDA/#854F0B/#633806 主 + c-coral #FAECE7/#993C1D/#712B13 点缀),核爆段 coral 600 高亮;账号美学对齐(非权游深色)
- 用户可继续要求:其他账号同款卡 / 调整模块 / 导出 PNG
## 旧梦留声机设定卡·情绪图条形加高(10:34-10:36)
- 用户需求:「情绪图能否整体高度再高一些,各阶段情绪起伏明显」
- **改** `桌面\MCNSkill项目\旧梦留声机\旧梦留声机账号设定卡.svg` 六段式情绪核弹结构:7 条条形底边统一对齐 y=812(原 804),高度放大——谷底「绝境施压」14→16、峰顶「核爆段」38→**56**,峰谷高差 24→40px;全部条顶 y 上移,注释行 y 822→836(与下方红线清单标题 y852 无重叠)
- 验证:条形文字垂直居中仍贴合条形内;峰谷对比明显
## 旧梦留声机设定卡·长图版配色升级(10:35-10:40)
- 用户需求:「长图版 标题颜色,卡片背景和文字颜色 都更好看」
- **重写** `旧梦留声机账号设定卡.svg` 配色体系(布局坐标不变):
- 标题:主标题改**渐变** `#8C2F1E→#C05A32` + weight 700;分隔线琥珀金 #E0953C;副标题 #B4642F;标语 #8C2F1E
- 模块:标题统一 #5E2A1E 600 + 竖条珊瑚红 #C13B2F;卡片双色系交替——暖奶油 #FFF3E2+边框 #EDCBA4(路线/基因/色彩)与浅珊瑚奶油 #FDEBE2+边框 #E8B7A2(气质/角色/红线)
- 文字:卡片标题 #7B2D1B/#8C3B2B,正文暖灰 #6F5B4A(替代原 #5F5E5A 纯灰);情绪图核爆 #D6403A+白字600,琥珀系统一 #F0B25C/#F7D9A8;红线×号 #C13B2F 600
- 整图加暖米底 #FDF8F0(原透明)
## 旧梦留声机设定卡·情绪图条形高度翻倍(10:37-10:42)
- 用户需求:「情绪部分 高度继续增加 一倍」
- **改** `旧梦留声机账号设定卡.svg`:7 条条形高度全部 ×2(38→76/16→32/32→64/56→112/42→84/26→52/36→72),底边统一对齐 y=880(原 812);因条形变高,注释行 836→904、红线清单整体下移(标题 852→932,卡片行 872/910/948→952/990/1028),viewBox 高度 990→1080
- 验证:高度×2 正确、底边全对齐 880、文字仍居中(核爆 768+56=824)
## 旧梦留声机设定卡·基因卡/角色卡排版升级(10:39-10:45)
- 用户需求:六大内容基因与角色类型库卡片文字排版按「GENE 01 标题 内容」「角色中文 英文 内容」样式
- **六大内容基因卡**:标题行拆为「GENE 0X」珊瑚红 #C13B2F 10px 600 小标签(x=61/259/457)+ 标题 12px 600 #7B2D1B(x=118/316/514),内容两行不变
- **角色类型库卡**:标题行拆为「中文名」12px 600 #8C3B2B(x=61/259/457)+ 英文名 9px #B0715A **右对齐**(text-anchor=end,x=223/421/619),内容行不变;英文名=Elder Guardian/Repaying Child/Suffering Mother/Great-Love Prototype/Guiding Benefactor/Stubborn Dreamer
- 验证:SVG 结构完整(1 svg/8 g/53 rect/97 text)、6 GENE + 6 英文名就位、全部标题末字尾 ≤ 卡右缘-8 无溢出
## 旧梦留声机设定卡·按参考长图版整体重写(10:44-10:55)
- 用户反馈:「排版还是不一样呢,仔细看看之前生成 长图版」+ 提供参考图 `桌面\旧梦留声机_账号设定卡_长图版.png`
- **重写** `旧梦留声机账号设定卡.svg`(完全推翻前几版,viewBox 680×1560):
- 背景:深棕红渐变 `#2B0F0A→#1A0805`(原暖米底)
- 顶部大框:浅米色 520×170 圆角 14,框内"旧梦留声机 · 账号 / 设定卡"两行 26px 渐变大标题 + 琥珀金分隔线 + 副标题 + 标语
- 装饰线:居中 `— channels requirement board 2026 —`
- 模块标题:▍+ 浅米色 14px 加粗
- **六大内容基因卡**(186×130,原 72):GENE 0X 标签 letter-spacing 1 + 大标题 14px 700 + 3 行描述(含新增金句"让他撑下去"/"脏一点泪点多一点"等)
- **角色类型库卡**(186×130,原 48):PROTOTYPE 标签 + 中文名 14px 700 + **英文代号大写斜体** `E. ELDER / R. REPayer / M. SUFFERING / A. ARCHETYPE / G. GUIDE / D. DREAMER` + 2 行描述
- 红线清单:深色 `#3D1810` 卡 + 边框 + 红×号
- 底部版权:数据来源 + content requirement board
## 旧梦留声机设定卡·修复红线清单与情绪图高度(10:47-10:52)
- 用户反馈:红线清单内容少了(重写长图版时只保留 2 条)、情绪部分高度又变矮了(重写时条形缩水)
- **修复** `旧梦留声机账号设定卡.svg`:
- 红线清单 2 条 → 补全 **6 条**(消费苦难/伪造真实素材/美化悲剧/角色没名字/强行好结局/植入打断情绪,2 列×3 行,卡 y=1538/1576/1614)
- 情绪图条形恢复到翻倍高度:56→76/26→32/44→64/76→112/54→84/34→52/46→72,底边对齐 y=1452(核爆段 y=1340 与标题基线 1336 差 4px 不重叠)
- viewBox 1560→1700,底部版权下移至 1672/1684
- 验证:7 条底边全对齐 1452、红线 6 条、无重叠
## 旧梦留声机设定卡·去 PROTOTYPE + 情绪小字(10:48-10:53)
- 用户反馈:① 角色类型库不需要加 PROTOTYPE 这个英文 ② 参考图情绪部分下面有一行小字
- **修改** `旧梦留声机账号设定卡.svg`:
- **去掉 6 张角色卡的 PROTOTYPE 标签**(珊瑚红小标签)→ 角色卡排版简化为「中文名 + 英文代号 + 3 行描述金句」(描述从 2 行扩到 3 行,新增金句"沉默里把全家扛在肩上"/"朴素到极致是最贵的善良"/"指路的手势比讲理更动人"等)
- **情绪图下方加一行小字** y=1506:`情绪节奏总览:压抑蓄力 → 核爆释放 → 破壁落地,每 10-30 秒完成一次情绪反转`(11px 斜体浅米色 #D9BFA3,居中)
- 验证:PROTOTYPE 残留 0,6 中文名+6英文代号完整,小字行已嵌入
## 旧梦留声机设定卡·标题换行+内容路线颜色(10:49-10:53)
- 用户反馈:①「旧梦留声机 · 账号 / 设定卡」换行不好看 → 改「旧梦留声机」+「账号设定卡」两行(26px 渐变标题,不带点号)② 内容路线参考图不是深色 → 卡片由 #3D1810 深色改 **#FAEEDA 浅米色 + 边框 #EDCBA4 + 文字 #7B2D1B**(与参考图/基因卡同色系)
- 验证:标题两行、内容路线 6 卡填充/边框统一浅米色
## 旧梦留声机设定卡·标题大小层级(10:51-10:54)
- 用户反馈:「账号设定卡 这几个字明显该小一些」
- **改** `旧梦留声机账号设定卡.svg` 顶部标题:「旧梦留声机」28px 700 渐变 +「账号设定卡」**16px 600 #8C2F1E letter-spacing 2**(副标题级,缩小 12px),形成大小主次
## 旧梦留声机设定卡·垂直居中+间距修复(10:52-10:56)
- 用户反馈:① 内容路线卡片中文字没有垂直居中 ② 红线清单和情绪下面的文字靠在一起了
- **改** `旧梦留声机账号设定卡.svg`:
- 内容路线 6 个文字 y 326→**321**(=卡片中心 296+25,垂直居中)
- 红线清单整体下移:标题 1522→1538、红线卡 1554/1592/1630、版权 1688/1700;情绪小字(y1506)与红线标题间距 16→**32px**;viewBox 1700→1716
- 验证:6 文字全部居中、间距 32px、红线 3 行 1554/1592/1630、viewBox 1716
## 旧梦留声机设定卡·色彩体系卡片加高(10:53-10:58)
- 用户反馈:「色彩体系 卡片 参考图中也高一些」
- **改** `旧梦留声机账号设定卡.svg`:色彩卡高度 50→**80**(y=882 h=80,标签文字 954→984);角色类型库整体下移 10px(标题 1000→1010,卡 1018→1028/1162→1172,内部文字同步 +10)
- ⚠️ 坑:手动 Edit 改第一张卡 y 后又用脚本整块 +10,导致第一张卡双重偏移(1038),已单独修正回 1028
- 验证:色卡 h80、角色卡 y 统一 1028/1172、色卡底 962 vs 角色库标题 1010 间距 48、角色库底 1302 vs 情绪标题 1336 间距 34
## 账号分析技能新增「功能六:生成账号设定卡片」(10:55-11:05)
- 用户需求:把生成账号设定卡片总结成一个功能(方式/要求/格式/注意事项),放入账号分析技能
- **新增** `references/feature/06_生成账号设定卡片.md`(源+dsh 副本同步):输入=功能三产出 `{达人昵称}账号设定.md`;产出=`{达人昵称}账号设定卡.svg`(680×~1700 深色长图);四步方式(读设定→12段模块映射→SVG手绘→验证交付);配色规范表(深棕红渐变背景/浅米色卡片/GENE 0X 标签/角色英文代号/核爆红);注意事项含「批量移动坐标防双重偏移」等 7 条避坑
- **改 SKILL.md**:功能总览 五大→**六大功能** + 功能六行;新增「八、功能六」章节;部署禁用说明补功能六(无连带文件);章节编号 七/八/九 连续
- 验证:源技能与 dsh 副本 06 文件与 SKILL.md diff 一致 ✓
## 账号分析技能功能六·补充模板样例与适配规则(10:58-11:08)
- 用户追问:下次生成别的账号设定卡片也要达到相同效果 → 除流程规范外补充三块
- **① 模板样例入技能**(自包含):`references/样例/模板_旧梦留声机账号设定卡.svg`(最佳成品)+ `参考_旧梦留声机_账号设定卡_长图版.png`(渲染效果);功能六「方式」新增 ①.5 步——动手前必读模板,复用版式骨架/样式常量,内容全替换;模板迭代=改模板→同步生成旧梦留声机卡确认→再用于新账号
- **② 模块裁剪适配规则**(新章节):按设定实际内容裁剪/增补——无流程删内容路线、无角色库删角色库、基因按条数定列数(2/3列 卡宽=600px/列数-间距)、情绪按实际段数(4-7段)、色彩用真实色值、红线条数不限;每个保留模块须 grep 验证能找到原文
- **③ 配色适配规则**(新章节):背景/卡片默认深色长图风保系列一致;色彩体系色块用账号真实色值;强调色跟随账号主色(暖→珊瑚红/琥珀,冷→冷蓝/冰青);冲突时以看得清/有层次/账号辨识度最高准则
- 同步:源技能 06 文件+SKILL.md+样例目录 → dsh 副本全部 diff 一致
## MCN工作台 账号详情 persona tab 卡片/文字切换(11:00-11:35,三轮迭代)
- **用户需求**:账号详情「账号设定」tab 改为可切换「卡片版/文字版」,默认显示卡片,无卡片显示文字
- **后端新增 2 接口**(server.js):
- `/api/dsh/account-card?name=` → 在 allowedRoots() 各根目录下查找 `{账号名}账号设定卡.svg`(规范路径 `{root}/{name}/{name}账号设定卡.svg` → 根下直挂 → 账号目录内扫描含「账号设定卡」的 svg,防目录名/账号名不一致)
- `/api/file?path=` → 内联文件输出(无 attachment 头,Content-Type 按 mimeOf),供 `<img>` 渲染 SVG
- 新增 `findAccountCard(name)` 工具函数(安全清理 `[\\/:*?"<>|]` 非法字符防路径穿越)
- **前端 persona tab 改造**(data-pages.js renderAccountDetail):
- 状态:`viewMode='card'`(卡片版默认)+ `personaCard={path|null}`
- `loadPersona()` 改 `Promise.all([account-persona, account-card])` 并行加载
- panel **三态渲染**:无设定→空态按钮(不变)/ 无卡片→直接文字版 `persona-text` / 有卡片→右上角图标切换组 `.persona-wrap > .persona-vs-icons + .card-view + .persona-text`
- 切换事件:直接 DOM 切换 `.card-view/.persona-text` 的 `vs-hidden` 类(不重渲染,保留滚动位置);按钮选择器 `[data-vs]` 兼容图标按钮
- **样式三轮迭代**(style.css):
1. 整行 segmented control「卡片版|文字版」+ 蓝底激活态(`.view-switch` 块)
2. 改为**右上角图标按钮组**:`.persona-wrap { position:relative }` + `.persona-vs-icons { position:absolute; top:0; right:0; z-index:2; display:inline-flex }`,图标 `film`(卡片)+ `file-text`(文字),激活态蓝底白字
3. 卡片图片 `max-width: 540px` → **width:100% 自适应内容区域**(去 max-width,依赖父 page max-width 封顶)
- **多视口验证**(CDP Emulation 900/1024/1280/1920/2560):
- imgW = wrapW,小视口 811→中视口 1191→大视口封顶 1382
- 所有视口 `docScrollW < viewport`,**无横向滚动**
- 用例 1629 旧梦留声机(有卡):默认卡片版、切文字版、切回卡片版 全过
- 用例 1627 王微斯(无卡):直接文字版无切换控件
- **服务重启**:旧 23976 任务被停(cNHaFK),新启后台任务 QMmTlH(127.0.0.1:8899);服务 Cache-Control: no-store,改完仍需 `Page.reload({ignoreCache:true})` 强制刷新
- 验证脚本保留 `cdp-verify-personacard.mjs`(多视口自检+三态断言+截图,可复用)
## 功能六配色适配升级:底色跟随账号风格(11:17-11:22)
- 用户反馈:「不同风格账号卡片要用对应底色,不是全部都是一个颜色」
- **改 06 文件「配色适配」章节**(原「默认沿用深色长图风」→ 强规则「禁止一律模板深棕红底」):
- 三步判定:①读设定色彩体系真实色值+赛道判风格 ②风格→底色映射表(7 类:暖怀旧→深棕红/浅米、温情亲子→深焦糖/奶油米、科技冷淡→深灰蓝/冷白、清新三农→深墨绿/米白、潮流都市→深紫黑/浅灰白、活力运动→深海军/冷白、甜美少女→深莓紫/浅粉白) ③强调色=账号主强调色
- 底色推导公式(未覆盖风格):主色压暗 15-25% + 降饱和 → 深色渐变底;卡片色取高对比浅色;系列一致性=同账号一致非跨账号一致
- **改 ①.5 读模板样例**:「配色体系为基准」→「版式骨架/字号/卡片尺寸/间距为基准,配色不沿用模板」
- **改 SKILL.md 八功能六配色适配要点**:底色跟随账号风格,禁止一律模板深棕红底 + 风格映射摘要
- 源技能 → dsh 副本同步,06 文件与 SKILL.md diff 全一致
## 功能六新增「触发场景处理」章节(11:20-11:24)
- 用户问「如果用户要求生成账号设定卡片,应该如何处理 分几种情况」→ 输出 7 情况分类 + 三问判定链,用户认可后固化
- **06 文件新增「触发场景处理」章节**(输入/产出之后、方式之前):三问判定链(①有无设定→无则功能三或全链路 ②卡片是否已存在→有则询问覆盖/微调 ③模块是否完整→缺则裁剪适配)+ 7 情况表(有设定无卡/有设定有卡/无设定在库/无设定不在库/设定缺模块/参考样式/调整已有卡)+ 环境路径
- **SKILL.md 八功能六**补「触发判定」行(指向 06 触发场景处理)
- 源技能 → dsh 副本同步,06 文件与 SKILL.md diff 全一致
## 功能六「内容基因 TOP6 全量」术语澄清(11:25-11:28)
- 用户问「账号设定中 TOP6 全量验证 是想说根据TOP6视频分析得出的吗」→ 确认混淆点:模块映射表第 4 行原写「内容基因(TOP6 全量)」,易误读为「TOP6 个基因」
- **改 06 文件**模块映射表第 4 行:「内容基因(TOP6 全量)」→「内容基因(设定中全部条目,全量呈现)」+ 新增术语澄清块(第 77 行):本表「内容基因全量」= 设定文件中内容基因条目**全部上卡、不裁剪**(旧梦留声机恰 6 条,非指 TOP6 视频);内容基因条目由**功能三基于 TOP6 视频**(筛选权威参数见 SKILL.md「视频筛选标准」)解析提炼得出——TOP6 视频是分析依据(输入),内容基因是结论呈现(输出),两个「6」层级不同,勿混淆
- 源技能 → dsh 副本同步,grep 确认两处第 77 行内容一致,且全文仅此一处含 TOP6 字样
## 功能六「六大内容基因·TOP6」表述简化(11:29-11:31)
- 用户反馈:「简化为 六大内容基因·TOP6 就行了 后续生成卡片也这样描述就行」
- **改 06 文件**:模块映射表第 4 行「内容基因(设定中全部条目,全量呈现)」→「内容基因(功能三基于 TOP6 视频提炼的结论)→ 六大内容基因·TOP6」;术语澄清块精简为一行注(保留核心:TOP6 视频=分析依据输入、内容基因=结论输出、卡片全量呈现不裁剪)+ 明确「后续生成卡片统一以『六大内容基因·TOP6』描述该模块」
- 源技能 → dsh 副本 cp 同步,diff 一致
## 功能六「内容基因·TOP6」定名 + 旧梦产出同步修改(11:31-11:33)
- 用户两连纠正:「简化为 六大内容基因·TOP6」→ 随即「应该改为 内容基因·TOP6」(去掉「六大」)
- **06 文件**(源+dsh):模块映射表第 4 行信息图模块「六大内容基因·TOP6」→「**内容基因·TOP6**」;术语注末句同步改「后续生成卡片统一以『内容基因·TOP6』描述该模块」
- **旧梦留声机产出同步**(桌面 MCNSkill项目/旧梦留声机/):
- `旧梦留声机账号设定.md`:小标题「六个内容基因标记(TOP6 全量验证)」→「**内容基因·TOP6**」;九差异化壁垒表「六个内容基因是频道级复用资产」→「内容基因·TOP6 是频道级复用资产」
- `旧梦留声机账号设定卡.svg`:模块标题「▍六大内容基因(TOP6 全量验证)」→「▍**内容基因·TOP6**」;desc 与代码注释同步改
- grep 验证三目录(源/dsh/桌面)无「六大内容基因/六个内容基因/TOP6 全量」残留
## 「核心气质」→「内容标签」改名(11:32-11:34)
- 用户反馈:「核心气质 应该 改为 内容标签」
- **06 文件**(源+dsh):模块映射表第 3 行「核心气质/人设标签 | 核心气质(chips)」→「内容标签/核心标签 | 内容标签(chips)」
- **模板样例 SVG**(源+dsh):desc/注释/模块标题 3 处「核心气质」→「内容标签」;顺带补上一轮遗漏——desc 里「六大内容基因」→「内容基因·TOP6」、注释+模块标题「▍六大内容基因(TOP6 全量验证)」→「▍内容基因·TOP6」
- **06 文件裁剪适配表**(源+dsh):「保留『六大内容基因』」→「保留『内容基因·TOP6』」(上一轮漏改)
- **桌面产出**(旧梦留声机):卡片 SVG 3 处「核心气质」→「内容标签」(sed)
- 验证:源/dsh 两文件 diff 全一致;三目录 grep「核心气质|六大内容基因|六个内容基因」零残留
## 「内容路线」→「叙事结构」全链路改名(11:34-11:37)
- 用户反馈:「内容路线 改为 叙事结构」——本次术语同时是设定字段名(设定 md 第 16 行)与卡片模块名,按命名一致性全链路统一
- **源技能 sed 批量替换 4 文件**(06 文件 4 处:模块映射表第 2 行/触发场景第 5 行/裁剪适配 96/97 行;人设卡生成方法.md 3 处:模板维度定义+校验清单 2 处;模板样例 SVG 3 处:desc/注释/标题;SKILL.md 1 处:功能六「无流程删叙事结构」)→ cp 同步 dsh 副本,diff 4 文件全一致
- **桌面产出**:设定 md 第 16 行字段「内容路线」→「叙事结构」;卡片 SVG desc/注释/标题 3 处同步
- **不动**:`.bak` 备份、`视频分析/*/analysis.json` 历史解析原始数据(保持数据准确性);dsh tmp/backfill_track_ztq.py 历史回填脚本(其他账号数据文本)
- 验证:功能文档三处 grep「内容路线」零残留
## 生成王微斯账号设定卡(11:45-11:52,功能六首个新账号实例)
- 用户需求:「生成 王微斯的 账号设定卡」;触发场景=**有设定无卡→全流程生成**(桌面 MCNSkill项目/王微斯/王微斯账号设定.md,08-13)
- **产出** `王微斯账号设定卡.svg`(680×1716,深色长图,同模板版式骨架)
- **配色适配**(不沿用模板深棕红):甜宠情感/乙女向→风格映射「甜美少女→深莓紫/浅粉白」→ 背景 #2A0F2E→#18071C 渐变、卡片 #FDF0F6 浅粉白+边框 #F0C9DD、强调玫红 #E0437F/#D84A8C、chips 深莓 #3D1030
- **模块裁剪适配**(王微斯 vs 旧梦差异):①内容基因 **4 条**→2×2 卡(卡宽 285=582-12/2,非模板 3 列)②情绪 **四段式**→4 条形(开场76/推拉100/破防128玫红高亮/收口88,底边全对齐 1452)③角色类型库=**女主横卡(582×100)+男主 4 卡 2×2**(无英文代号省略斜体行)④叙事结构 5 步→5 卡 104 宽⑤**删色彩体系模块**(设定无色彩体系段,不硬塞)⑥内容标签 12 chips 两行
- **验证**:svg/g 配对(1/1,15/15)、4 条形底边 1452 全对齐、模块间距≥30px、最长文字行(红线19字)不超卡右缘 ✓
## 配色适配·底色=背景色 修正(11:49-11:53)
- 用户澄清:「我说的是改底色就是背景色,不是改里面的元素的颜色」——之前我把映射表写成「背景色/卡片色/强调色」3 列并改了王微斯卡片元素色,理解偏了
- **修正 06 文档配色适配章节**(源+dsh):①明确「底色=整卡背景色」,卡片/文字/标签/强调色等内部元素颜色**不随账号变**,统一按下方「配色规范」表(浅米卡+深色字+珊瑚红强调);②映射表去「卡片色」「强调色」列,只留「背景底色」;③强规则加「**只换背景色**:内部元素一律按配色规范表」;④配色规范表标题「旧梦留声机定版」→「模板统一色,所有账号通用;仅背景色随账号风格换」
- **改 SKILL.md**(源+dsh)功能六配色要点:明确「底色=整卡背景色,只换背景色,内部元素保持模板统一色」
- **修正王微斯卡元素色**(sed 批量):卡片 #FDF0F6→#FAEEDA、边框 #F0C9DD→#EDCBA4、标题 #7B2D5E→#7B2D1B、正文 #6F4A5E→#6F5B4A、GENE #D84A8C→#C13B2F、chips #3D1030→#3D1810+边框 #A8879B→#A88770、标题渐变 #C0457F→#8C2F1E / #E876A9→#C05A32、副题 #8C3B6B→#8C3B2B、情绪条 #F7D9E8→#F7D9A8 / #F2C0DA→#F0B25C / #E0437F→#D6403A / #C22F6A→#A92825、红线 #E0437F→#D6403A、版权 #8A5E7A→#7A5645;**仅保留**背景渐变 #241020→#12070F(深莓紫,甜美/甜宠风格映射)
- 验证:svg/g 1/1+15/15、模板色使用 96 处、粉色系残留 0;CDP 截图渲染确认背景深莓紫+元素全模板色(系列感一致)
- 脚本保留 cdp-shot-wangweisi.mjs(本地 SVG 截图自检)
## 深莓紫背景调亮(11:52-11:54)
- 用户反馈:「背景色 我看还是黑色呢」——原映射色 #241020→#12070F 压太暗,紫调不可辨,视觉近黑
- **调亮**:王微斯卡 bgGrad `#241020→#12070F` → `#3A1E42→#22102A`(顶部 R58/G30/B66 紫调明显、亮度≈旧梦深棕红 2 倍;底部深紫 #22102A,仍保深色底)
- **06 文档映射表**(源+dsh)甜美/少女/二次元行同步更新色值
- 经验固化:深色渐变底顶部色需保紫/蓝/绿等色相可辨(亮度≈50/255),过暗则视觉归黑;旧梦深棕红 #2B0F0A 亮度 23 但因红棕调暖尚可辨,冷色调更易显黑需提亮
## 工作台账号设定内容区左右 +20px 间隔(11:42-11:44)
- 用户反馈:「账号设定卡 左右可以在间隔20PX」→ 澄清:不是改 SVG,是**工作台账号详情「账号设定」tab 内容区距页面左右再增 20px 间隔**
- **改 style.css** `.persona-wrap`: `position: relative` → `position: relative; padding: 0 20px;`(卡片版 .card-view 与文字版 .persona-text 同在 persona-wrap 内,左右各内缩 20px;绝对定位的 .persona-vs-icons 切换图标不受 padding 影响仍贴右上角)
- **验证**(CDP #/account/1629 强制刷新 + 点 persona tab):computed padding-left/right=20px;卡片 imgW 1122.7 vs detail-body 1172.7,内缩合计 50px(左 detail-body 10 + persona 20,右 persona 20);文字版 inset 同 50 ✓
- 静态 CSS 改动无需重启服务(HTTP 200);验证脚本保留 `cdp-verify-personapad.mjs`
## 王微斯账号设定卡重写为浅色甜宠风(11:54-11:55)
- 用户反馈:「这个账号的调性 应该是没那么深的颜色」——深莓紫 #3A1E42→#22102A 仍偏暗,账号整体偏甜宠少女应走明快调性
- **重写** `桌面\MCNSkill项目\王微斯\王微斯账号设定卡.svg` 为浅色甜宠风(布局坐标 680×1716 不变,全量换色):
- 背景:`#3A1E42→#22102A` 深莓紫 → **`#F8EDF6→#F1E0EE` 浅粉紫渐变**
- 顶部标题框:白 `#FFFFFF` + 粉边 `#E8C9DC`,主标题渐变 `#C0457F→#E876A9`(粉),副标题/标语/模块标题 `#7B2D5E`(深粉)
- 五步推拉 / 内容标签 / 基因卡 / 角色库:内部元素全部从「模板统一色 + 粉调」改回「白卡 + 粉边 + 粉 chips」体系(chips `#F7E8F2`/`#D8A9C8`、GENE 标签 `#E0437F`、正文 `#6F4A5E`)
- 四段式情绪:浅粉/中粉/破防段 `#E0437F` 高亮(白字 700)/浅粉,注释 `#B98AA6`、小字 `#A98A9C`
- 红线清单:浅粉条 `#F7E8F2` + 粉×号 `#E0437F`、文字深粉
- **06 文档新增「浅色系配色规范」**(源+dsh 同步):
- 配色适配章节重写:底色**分两系**(深色系=深沉浓郁调性,浅色系=明快/甜美/治愈调性),内部元素跟随所选色系,不再「只换背景色」→ 改为「**底色决定色系**」
- 关键定义:浅色系 = 白卡 + 粉边 + 深粉文字 + 粉强调
- 风格映射表「甜美/少女/二次元」行:深莓紫(调性深沉时)|**浅色甜宠风 `#F8EDF6→#F1E0EE`(调性明快时,如王微斯)**
- 新增浅色系推导公式:主色 → 提亮 90%+ 亮度 + 大幅降饱和 → 浅色渐变底;正文用主色加深版(`#7B2D5E` 档)
- 配色规范表拆为两套并列:「**深色系(深色长图风,如旧梦留声机)**」+「**浅色系(浅色甜宠风,如王微斯)**」(含背景/标题框/主标题渐变/副标题/模块标题/卡片背景×2类/卡片标题/正文/GENE/英文代号/情绪图破防/琥珀段/小字/红线×号 14 行色值)
- 强规则第 2 条「只换背景色」→「底色决定色系」
- **验证**:源/dsh 06 文档 diff 全一致;CDP 截图(`shot-wangweisi-card.png`)渲染确认浅粉紫底+白卡+深粉字+破防段粉红高亮,整体调性明快甜宠 ✓
- 经验固化:**配色分两系而非单系**——深色系适合剧情/怀旧/深沉调性,浅色系适合甜宠/少女/治愈/明快调性;同一账号必须固定色系,跨账号可不同;未来生成新账号卡片时按风格落系,色值从对应色系表查,禁跨系混用
- 脚本升级:`cdp-shot-wangweisi.mjs` 页面匹配 `decodeURIComponent(t.url).includes('王微斯')`(9223 URL 百分号编码坑)+ 补 `Page.reload({ignoreCache:true})`(同 URL navigate 不重载)
## 王微斯卡片·玫瑰金背景试版(12:01-12:03)
- 用户需求:「这个保留 再试试 偏粉的深一点的玫瑰金色」——保留当前浅色甜宠风版式与内部元素,仅换**背景**为偏粉深玫瑰金渐变
- **改** `桌面\MCNSkill项目\王微斯\王微斯账号设定卡.svg`:
- 渐变:`#F8EDF6→#F1E0EE` 浅粉紫 → **`#D6A3A9→#9A5563`**(顶部偏粉玫瑰金 → 底部深玫瑰金)
- 背景上直接书写的元素提亮(背景变深需保可读):6 处模块标题 `#7B2D5E`→`#FDE8EC`(浅粉白)、装饰线+4 处情绪百分比小字 `#B98AA6`→`#EAC6CE`、斜体行+版权 2 行 `#A98A9C`→`#DDBCC4`
- **不动**:白卡 #FFFFFF×15、粉 chips #F7E8F2×20、卡片内深粉文字/粉强调等全部内部元素(遵守「改底色=改背景色」原则)
- **备份**:原浅粉紫版 → `王微斯账号设定卡_浅粉紫底.bak.svg`(同目录,可回退)
- **验证**(CDP 断言+截图 shot-wangweisi-rosegold.png):bg0=#D6A3A9 / bg1=#9A5563 / 6 标题 #FDE8EC / 装饰线 #EAC6CE / 版权 #DDBCC4 / 白卡 15 / 粉 chips 20 全保留 ✓
- 验证脚本保留 `cdp-verify-rosegold.mjs`(断言渐变 stop + 背景上文字 + 内部元素计数,可复用)
## 王微斯卡片·定稿玫瑰金底(12:03-12:05)
- 用户反馈:「感觉那个(玫瑰金)更适合 这个账号调性」→ 玫瑰金底定稿,当前 `王微斯账号设定卡.svg`(#D6A3A9→#9A5563)为最终版;浅粉紫备份 `_浅粉紫底.bak.svg` 保留可回退
- **06 文档固化**(源+dsh 同步,diff 一致):
- 映射表甜美行:深莓紫(深沉时)|**玫瑰金 #D6A3A9→#9A5563(明快时,如王微斯·定稿)**
- 浅色系推导改「提亮+降饱和至中浅明度(约 65-90% 亮度)」+ 新增「背景上直接书写的文字随背景深浅提亮保可读」(玫瑰金底:模块标题 #FDE8EC/装饰线注释 #EAC6CE/斜体版权 #DDBCC4)
- 浅色系表更新:背景=玫瑰金(更浅可回退浅粉紫)、模块标题=#FDE8EC、情绪小字=#EAC6CE;表后加注释(背景越浅越近深粉字、越深越近浅粉白)
- **SKILL.md 功能六配色段更新**(源+dsh diff 一致):「只换背景色」→「底色决定色系」两系完整表述 + 玫瑰金映射 + 浅色系推导 + 背景文字提亮
- **MEMORY.md**:浅色系定稿色值更新为玫瑰金
- 经验固化:用户试色闭环=「先试浅→再试深一点有色相→选定稿」,配色迭代时**备份每个候选版**(.bak.svg)防回退;色系表以账号定稿为准反哺文档,避免文档停留在试色中间态
## 王微斯卡片·叙事结构箭头位置修复(12:07-12:08)
- 用户反馈:「叙事结构 卡片之间的箭头 都偏到 卡片里面了」
- **根因**:卡片缝隙仅 15px,但箭头 line 只画了 2px(如 x1=153 x2=155),marker 宽 6px(refX=8 → 尾部在 x2-4.8),箭头主体伸进左侧卡片约 3px
- **修复**:4 条箭头线拉长占满缝隙——154→166 / 273→285 / 392→404 / 511→523(各 12px;卡右缘+1 起、卡左缘-2 止),箭头整体居中于两卡之间,尾部不碰卡1、尖部离卡2 左缘 2px
- **验证**(CDP 断言):4 线 x1/x2 全对、线长≥11px(arrowsInGap=true)、背景/标题/白卡15/粉chips20 不受影响 ✓
- 经验固化:**卡片间箭头/连线必须按缝隙宽度画线**(缝隙宽-3~4px 的线长),marker 宽度决定最小线长(线长须 ≥ marker 渲染宽 + 1px,否则箭头伸进相邻元素);同款五步卡布局(104 宽×5 + 15px 缝隙)复用时直接套用此坐标
## 固化:功能三自动联动生成设定卡 + 双向联动维护(12:12-12:15)
- 用户需求:「给用户获取账号设定时 自动生成设定卡片,固化到skill中,修改时两边一起修改」——①功能三产出设定后**自动**生成卡片(无需用户开口)②设定 md 与卡片 SVG **双向联动**同步修改,全部固化到技能
- **SKILL.md**(源+dsh):功能总览表功能六「功能三之后可选」→「**功能三自动联动(默认)**」;部署禁用说明补「删除功能六文件则不再自动生成(存量可手动)」;功能三核心流程加 **Step 7(自动联动)**;功能六章节加「自动触发(默认)」+「双向联动维护」
- **03_提炼账号设定.md**(源+dsh):新增 **Step 7:自动生成账号设定卡片(联动)**——默认自动触发(跳过条件:功能六文件删除/用户明确只要设定)+ 双向联动维护 3 条规则(改设定→卡片同步、改卡片→设定同步、术语改名→两边一起改)+ grep 一致性校验
- **06_生成账号设定卡片.md**(源+dsh):使用场景改「默认由功能三自动联动触发」;触发场景处理加「默认自动触发」说明;情况 1 注「自动流程已覆盖」;环境路径后新增「**双向联动维护**」章节(含历史改名案例:内容路线→叙事结构、核心气质→内容标签、六大内容基因→内容基因·TOP6)
- 验证:3 文件源=dsh diff 全一致;MEMORY.md 联动规则已固化
- 经验固化:功能联动类需求固化落点=SKILL.md(总览/章节)+ 上游功能文档(自动触发的源头)+ 下游功能文档(触发判定与维护规则);「修改时两边一起修改」的准确载体=设定 md ↔ 卡片 SVG 两个产出文件(非源技能/dsh,那是既有同步策略)
## mcn-video-prompt 提示词输出结构 4层→6层重排(用户定稿,14:29)
- **新结构**:①主体列表 → ②画面质感(视觉风格+摄影质感参数,视觉基调前置)→ ③色调光影(光源+主光方向+亮暗区+色调/色温)→ ④主体设定(人物/场景/构图)→ ⑤镜头叙事 → ⑥负面提示词;原「②设定」层拆为画面质感/色调光影/主体设定三层,视觉基调前置(模型对提示词开头权重最高)
- **修改文件 3 个**(逐条改+验证):
- `subskill/mcn-video-prompt/references/制作流程/分镜提示词制作流程.md`(权威出处,9 处):3.2/3.2.2 标题、改造原则、3.2.1 思考清单层号映射、3.2.2 输出格式块整体重排、6层×5类型适配表(列扩为⑦列)、Step5 校验②结构完整性、总流程 3 处引用、对比表技术参数行
- `subskill/mcn-video-prompt/SKILL.md`(8 处):F4 提示词内部结构、F2/F4 详细方法论引用×2、剧本分析前置段、工作流 Step3、提示词模板节×2、自检⑧结构完整性;frontmatter updated_at=2026-08-31+last_change
- `subskill/mcn-video-prompt/references/制作流程/长视频分段制作流程.md`(4 处):一致性锁定表(②设定-视觉风格→②画面质感等)、简单段/复杂段输出模板重排为 6 层
- 验证:全局 grep 旧层号零残留("4层"仅剩 last_change 变更描述+L189 F2"4层退化策略"无关概念);6层落位 SKILL.md×8/分镜提示词制作流程×7/长视频分段×3
- 注:dsh 副本(storyboard-prompt)未同步,按 .dsh 单向只读约定待用户授权
## 关闭工作台服务 + 项目同步仓库(15:01-15:05)
- 用户需求:「关闭工作台服务,项目同步到仓库 已本地文件为准」(中断后重发「同步项目到 仓库」)
- **关停服务**:8899 工作台 node 服务双 PID(20604/29924)用 PowerShell `Stop-Process -Id -Force` 终止(Git Bash `taskkill //PID` 参数转义报错不可用);残留 LISTENING PID 33216 查证为系统无关进程 MiPCAudio.exe,保留不动
- **.gitignore 追加**:`**/mcn-work-shop/server.log`、`**/mcn-work-shop/shot-*.png`、`tmp/`、`.workbuddy/tmp/`、`generated-images/`(运行日志/自检截图/临时目录不入库;cdp-*.mjs 验证脚本保留入库)
- **git 同步**:`git fetch` 无分叉(HEAD=origin/main=ab97842)→ `git add -A`(35 项)→ commit 268ce29 → `git push origin main` 成功(ab97842..268ce29),推送后工作区干净
- 经验固化:Windows 下关停后台 node 服务用 PowerShell Stop-Process;推送前先 fetch 确认无分叉,避免非 fast-forward
## mcn-video-prompt「④主体设定」→「④设定」改名(15:35)
- 用户指令:「把主体设定 改为设定」——6 层结构第④层去「主体」前缀(6 层现为:①主体列表→②画面质感→③色调光影→④设定→⑤镜头叙事→⑥负面提示词)
- **20 处全量替换**(replace_all 精确串「主体设定」→「设定」,不触碰「主体」「人物设定」等词):
- `SKILL.md` 6 处(F4 L275/模板节 L410/自检⑧ L483/F2·F4 方法论引用 L205/L292 + frontmatter last_change 重写)
- `分镜提示词制作流程.md` 10 处(3.2 改造原则/3.2.1 思考清单 4 行/3.2.2 输出格式块/6层×5类型适配表表头/Step5 校验/示例D/对比表)
- `长视频分段制作流程.md` 4 处(一致性锁定表/简单段·复杂段模板)
- frontmatter last_change 更新:「④主体设定→④设定 改名(20处全量替换)…站位归⑤镜头叙事(画面坐标)、构图归④设定-构图(08-31 边界确认)」
- 验证:grep「主体设定」全目录仅剩 last_change 历史描述 1 处(有意保留);「④设定」落位 18 处(SKILL.md 4 行+制作流程 10+长视频 4);L142「③人物设定」为思考清单字段名正确保留;L205/L292 无④前缀引用同步为「设定」
- 待办:dsh 副本(storyboard-prompt)未同步,按 .dsh 单向只读约定待用户授权;站位/构图边界固化到文档未做(用户仅确认改名,固化待确认)
## mcn-video-prompt 6层+改名 同步到 dsh 副本(15:37)
- 用户授权:「同步到 dsh 对应技能」→ 同步 `C:\Users\maidou\.dsh\skills\storyboard-prompt\`
- **同步前确认**:dsh 副本停在 **4层结构旧版**(L42/L87/L129/L165 等 4层+②设定),需连同 14:29 的 4→6 层重排一起同步;三个文件差异全部为 4→6 层+改名,无独有内容需保护
- **同步方式**:cp 源 3 文件覆盖副本(SKILL.md/分镜提示词制作流程.md/长视频分段制作流程.md)→ 恢复 dsh SKILL.md frontmatter 专有字段(name: storyboard-prompt / deployment: dsh / deployed_at: "2026-08-31";updated_at/last_change 采用源最新值)
- **验证**:制作流程 2 文件 diff=0;SKILL.md 仅剩 frontmatter 4 对预期环境差异;副本「主体设定/4层结构」零残留(仅 last_change 历史描述);6层落位 SKILL.md×8/制作流程×7/长视频×3、④设定落位 4/10/4 与源完全一致 ✓
- 经验固化:diff 全文件不匹配(1,414c1,408)时先查换行符(本次均 LF,系普通 diff 对整体替换块的误读),用 `diff --strip-trailing-cr` 得到真实差异量;dsh 副本因停在旧结构版本,同步=cp 覆盖+恢复 dsh frontmatter,比逐行改更可靠
## mcn-video-prompt 站位/构图边界固化(15:40)
- 用户确认「需要」→ 把站位/构图边界(前序已确认)固化进技能文档,源+dsh 同步
- **固化内容**:构图=画面布局归**④设定-构图**(景别+前中后景层次+构图法则+视觉重心/留白,词库14_构图布局);站位=画面坐标归**⑤镜头叙事**(如"男主位于画面右侧、四分之三侧朝镜头",逐镜头变化随镜头写,词库03_场景描述·演员调度三要素);一句话=「④设定写静态属性(整段框架级),⑤镜头写动态调度(逐镜头)」
- **固化 3 处**(源+dsh 各 3 处):
- 分镜提示词制作流程.md 3.2.2 输出格式块(④设定与⑤镜头之间加边界注释行 L181)
- 分镜提示词制作流程.md 6层×5类型适配表后(L218 边界写入位置注记)
- SKILL.md F4 提示词内部结构(L275 6层定义末尾补「站位/构图边界」句)
- frontmatter last_change 两边同步更新(补「站位/构图边界固化(08-31)…注记入 3.2.2 输出格式块+适配表+SKILL.md F4 结构定义」)
- **验证**:制作流程 diff=0;SKILL.md 仅剩 frontmatter 4 对预期环境差异;边界落位源+dsh 各 3 处一致 ✓
## 内容基因·TOPn 动态规则 + 王微斯修正 TOP6→TOP4(16:05-16:12)
- 用户规则:「内容基因·TOPn 的 n = **实际解析视频数**(几个视频就是 TOP 几),不是固定 6;看设定中内容基因有几个板块即可判定」(王微斯设定「四个内容基因标记」→ 4 条 → TOP4,此前误写 TOP6)
- **王微斯产出修正 3 文件**:`王微斯账号设定卡.svg` 3 处(desc/模块标题/底部版权 TOP6→TOP4);`王微斯账号设定.md` 与 `_参考.md` 各 5 处(头部「解析视频:最近三个月TOP6」→TOP4、人设底线「基于6条视频…已通过6条视频验证…基于6条视频的归纳」→4条、梗元素「当前6条视频」→4条);备份 `_浅粉紫底.bak.svg` 与 `账号数据分析.md`(排名描述 TOP1/2 等)不在本次范围不动
- **技能固化(源+dsh diff 一致)**:SKILL.md 视频筛选标准行补「实际满足条件视频不足 6 条时按实际条数取(TOPn 的 n=实际解析条数),产出文件 TOPn 按实际条数写」;06 文档 5 处 TOP6→TOPn(双向联动历史案例/一致性校验/模块映射表/注/裁剪适配表);03 文档 grep 校验 TOP6→TOPn
- **验证**:源=dsh 三文件 diff 全空;王微斯产出零「TOP6/6条视频」残留(排除 bak/数据分析排名描述);技能文件零「内容基因·TOP6」残留;卡片 TOP4 3 处 ✓
- 经验固化:TOPn 是**动态值非固定 6**——筛选上限 6 与产出显示值(实际解析条数)分离;判定口径=设定 md「内容基因」板块数(与视频解析条数一致)
## MCP 检测触发时机补「首次提问/功能介绍」(16:14-16:20)
- 用户反馈:**安装到用户环境时,询问技能有什么功能、生成相关内容后,没有检查用户是否安装 MCP 服务,也没有提示需要安装**
- **根因**:mcn-dou-analysis 的 MCP 检测触发时机只有「执行工作流前(视频解析前)」(MCP_工具调用规范.md 3 节),首次提问/功能介绍场景不触发;创作技能 V1.0 源+dsh 已有「用户首次提问(无论问什么)即检测」无此缺口
- **修复(源+dsh diff 一致)**:MCP_工具调用规范.md 3 节触发时机扩为「① 首次提问/功能介绍时 + ② 执行工作流前」,新增触发点行=回答功能介绍后检测 `myai-mcp-production` 可用性 → 未安装主动提示「功能五(视频解析)依赖 MCN MCP 服务,当前未安装」+ 询问是否自动配置;SKILL.md MCP 章节安装引导行同步补「首次提问/功能介绍时 + 执行工作流前」
- **验证**:源=dsh 两文件 diff 全空;创作技能 short-video-script 副本 L63/L29/L33 与源一致(已有首次提问检测)✓
- 经验固化:部署类技能(含 MCP 依赖)的检测触发时机要覆盖**首次接触场景**(问功能/初次使用),不能只挂在执行工作流前;用户环境部署后用户第一件事就是问功能,此时不提醒 → 后续用到才发现没装 MCP
## 方向修正:MCP 首次检测只改创作技能,账号分析回滚(16:20-16:28)
- 用户纠正:**问题在脚本创作**——规则写了「首次提问自动检测」但用户环境实测没提醒;**账号分析应保持之前状态**(加到那里没用)
- **账号分析回滚**(源+dsh,SKILL.md 安装引导行 + MCP 规范 3 节触发时机恢复原文本「执行工作流前(视频解析前)检测」)→ diff 验证源=dsh 一致 ✓
- **创作技能根因**:SKILL.md「MCP 依赖(摘要)·安装引导」只有**描述性声明**(「用户首次提问时自动检测」),不是强制开场动作——模型触发技能读 SKILL.md 时只当背景信息,不会主动执行检测;且「检测」具体方法未明确
- **创作技能修复(源+dsh=short-video-script,内容 diff 一致;SKILL.md 差异仅 frontmatter 环境标签/工作台章节/dsh 独有 script-review 行等预期项)**:
- SKILL.md 安装引导行升级为**必做动作**:「首次触发检查」——会话首次交互(问功能/功能介绍/发起任何任务,无论问什么)先检查 `myai-mcp-production` 可用性(查当前会话可用工具列表含 auth_status/upload_douyin_video 等,或读 `~/.workbuddy/mcp.json` 含该服务配置,任一即可)→ 未安装 → 按 MCP 规范 3 节首次提问轻量提醒(可跳过不打断创作)
- MCP_工具调用规范.md 3 节:触发时机补「首次提问」定义(=本技能会话首次交互,由 SKILL.md 安装引导作为必做动作驱动)+ 检测方法明确化(①②任一判定)
- 帮助文档.md:MCP 授权步骤前补「MCP 服务说明」——首次使用会检测并提示安装(可跳过)
- **经验固化(重要)**:技能规则「写了」≠「会执行」——**描述性声明必须升级为动作指令**(明确"你(模型)现在就要做、怎么做、什么时机做")才可执行;SKILL.md 是每次触发必读,references 是按需读,**强制动作要挂 SKILL.md 主路径**,references 只放细节
## browser-harness 环境检查与安装 + 系统分流(16:30-16:50)
- 用户要求:**browser harness 的环境检查和安装也应该一并处理**;随后补充:**检查环境和安装依赖要区分 Windows 和 Mac 系统**
- **browser-harness 检测(mcn-dou-analysis,源+dsh diff 一致)**:
- SKILL.md 关键规则表新增「browser-harness 依赖(红线)」行:功能一/二(浏览器抓取)执行前必检——检测方法(任一即可)① 可执行文件存在性(Win `~/.local/bin/browser-harness.exe` / macOS `~/.local/bin/browser-harness`)② 命令探测(Win `where` / macOS `command -v`)→ 未装提醒(可跳过,换三方API/MCP兜底,但浏览器抓取无法执行)→ 同意则 `uv tool install --python 3.12 --upgrade --force browser-harness` → `browser-harness doctor` 验三要素(工具/daemon/Chrome)
- 浏览器搜索抖音账号操作规范.md 第五节新增 5.0「环境检查与安装(每次浏览器任务前必做)」:检测方法表 + 安装引导 + 安装后验证;技能体 `~/.dsh/skills/browser-harness/` 随 dsh_MCNProject 分发(换机器自带)
- **系统分流(Windows/macOS)落点(源+dsh 全部同步)**:
- 浏览器规范:环境说明(可执行文件路径分系统)、5.0 命令探测补 `where`、5.1 代理清理分(Win PowerShell Remove-Item / mac bash unset)、连接方式 B 定向分($env:BU_CDP_URL / export)、方式 C Chrome 启动分(chrome.exe / /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)、5.2 端口探测分(Invoke-WebRequest / curl)
- MCP 检测(创作技能 V1.0 + short-video-script 副本):SKILL.md 安装引导行 + MCP 规范 3 节步骤1 的 mcp.json 路径分系统(Win `%USERPROFILE%\.workbuddy\mcp.json` / mac `~/.workbuddy/mcp.json`);部署预检 npm 缓存权限检查标注「macOS 高发坑,Windows 跳过」(find -user root 仅 mac/Linux)
- **验证**:mcn-dou-analysis SKILL.md/浏览器规范 源=dsh 一致;short-video-script MCP 规范 源=dsh diff 全空;SKILL.md 差异仅预期环境差异(源独有工作台/外部技能依赖章节 + frontmatter deployment 标签 + dsh 独有 script-review 行),安装引导行源 L83=dsh L63 完全一致
- 经验固化:环境检查/安装依赖类命令必须**按系统给双命令**(Win PowerShell / mac bash),路径用 `~`(mac)/ `%USERPROFILE%`(Win)双写法;macOS 高发坑(npm root 缓存、代理劫持 CDP)与 Windows 差异(无 root 文件问题、where 代替 command -v)要显式标注
- **版本标签同步(16:55)**:short-video-script 源+dsh 的 frontmatter 更新 `updated_at/last_change`=「MCP首次触发检查+系统分流」、dsh 另更新 `deployed_at`=2026-08-31;mcn-dou-analysis 无版本标签体系(08-27 定主版本时未引入,保持源=dsh 一致不动)
- **远程仓库名确认(17:00)**:用户问「mcnskills 仓库已改为 mcn-video-script 确认下」——实测远程 `mcnskills.git` 仍存在可达、`mcn-video-script.git` 不存在(Cannot find repository);改名仅本地目录(MCNVideo AI→mcn-short-video→mcn-video-script),远程一直叫 mcnskills.git;如需统一需在服务器端 gitea/gitlab 改名
## 工作台 AI脚本诊断 → mcn-script-review 技能关联(17:05)
- 用户要求:**工作台的AI脚本诊断 应该用 mcn-script-review 技能,记录下**
- 背景:工作台 #/reviews 页已从「AI写作复盘」改名为「AI脚本诊断」(cdp-verify-rename.mjs 验证过);页内「复盘」按钮 confirmRun 的 prompt 原先只写「请对这条 AI 脚本做复盘评分(三种模式)」,未指定技能
- **改动(功能层 + 技能侧 + 记忆)**:
- data-pages.js #/reviews 复盘确认弹窗 desc/prompt:补「按 mcn-script-review(脚本复盘)技能执行」
- app.js 帮助页 FUNC_GROUPS「诊断 & 评分」组:desc 改为「按 mcn-script-review(脚本复盘)技能评分式复盘 + 对比分析」+ 新增「对比 AI脚本 和 原视频脚本」问法(对应对比分析三段式)
- mcn-script-review SKILL.md「与相关技能的关系」表:新增「MCN工作台(mcn-work-shop)」行——AI脚本诊断页复盘入口的 AI 任务 prompt 明确指定按本技能执行
- MEMORY.md 工作台条目补 AI脚本诊断关联
- 说明:mcn-script-review = 评分式质量复盘(6+4维、叙事逻辑2倍权重、逻辑硬伤预检)+ AI脚本vs源脚本对比分析(三段式)+ 创作过程复盘;判定标准只读引用 short-video-script 知识库 09_脚本诊断
## 俊希全流程测试用例编写(17:10)
- 用户要求:编写测试用例,用账号「俊希」测试「获取账号数据(有就刷新)→ 提取账号设定 → AI参考最新视频选题 → 写脚本」完整流程
- **前置调研结论**:达人账号表仅 2 行(小咪橘座 70010/旧梦留声机 70013),**俊希不在表** → 首次登记 70014;`MCNSkill项目/俊希/` 仅含 `提示词01/`(分镜产出),无账号分析产出 → 全新执行场景
- **用例落盘**:`.workbuddy/test-cases/2026-08-31_俊希全流程.md`(TC-20260831-01),覆盖 TC-01 账号表登记 → TC-02 获取账号信息(含「有就刷新」分支:更新时间近1个月提示用户判断)→ TC-03 获取视频(≥60条/13列Excel)→ TC-04 筛选TOP(select-top6,n≤6按实际)→ TC-05 MCP解析(upload→3-5min→detail,补充规则)→ TC-06 json_tool 保存 → TC-07 人设卡12段 → TC-08 设定卡自动生成(grep一致性)→ TC-09 工作台AI选题(/api/ai/topics→3选题)→ TC-10 AI写脚本(S1-S11,automations触发)→ TC-11 收尾验证(git提交);含数据校验标准表 + 8 项异常分支预案 + 验收汇总表
- 用例引用的权威参数:视频筛选标准(TOP6上限/不足按实际,SKILL.md L43)、视频获取数量(≥60条停止,L44)、browser-harness 红线(L49)、路径配置(references/路径配置.md:开发机→桌面 MCNSkill项目/俊希/ 直挂)
## 俊希用例补充:界面模拟点击 + 数据检查判定(17:20-17:30)
- 用户两点补充:①测试用例需要**模拟点击界面**进行测试;②执行前要**判断项目文件夹和数据库中是否已有数据、是否需要清除**
- **数据检查实测结论**(写进用例「二·补」章节):桌面 `MCNSkill项目/俊希/` 仅提示词01(分镜)→ 无需清除;达人账号表无俊希 → 首次登记 70014;**工作台 mcn-plugin.db 有俊希历史数据**(hot_accounts id=3 含 content 设定文本/278.7万粉/JJX0827、account_videos 108 条、rewrite_log 3 条 2026-08-19 海鲜大餐主题,source_dir=`D:\dshworkspace\账号解析\俊希`/`抖音账号分析\俊希` 均为**旧路径残留目录已不存在**);**关键:account_persona 无俊希**(5 行全为 1627-1630 测试占位)→ 工作台 confirmAiScript 的 hasPersona=false → 弹窗走「先进行账号设定分析」分支 → **首次场景成立,数据库无需清除**;dsh 原库同样有俊希(.dsh 只读红线绝不写);清除操作仅限工作台自有副本且需先备份
- **模拟点击脚本**:`mcn-work-shop/cdp-test-junxi.mjs`(新写,CDP 连接 9223 → Target.createTarget 新开标签页打开 #/accounts 不干扰用户页面 → Runtime.evaluate 模拟点击 → 轮询弹窗/AI选题 → 自动关标签页);`node cdp-test-junxi.mjs`(安全模式,验证到选题生成)`--confirm`(继续触发创作任务)
- **实测通过(17:25)**:Step1 定位俊希按钮 PASS / Step2 AI写脚本弹窗结构 PASS(文案「先进行账号设定分析」符合首次场景)/ Step3-4 AI 选题 PASS(返回 3 方向:突击妈妈公司送便当·职场探班 / 替妈妈筹备闺蜜聚会·社交危机公关 / 打工人妈妈病号特权日·角色互换)
- ⚠️ **坑**:index.html 有 `hidden` 的 `#settingsModal`(项目文件地址设置弹窗),其 `.modal` 子元素仍在 DOM → `document.querySelector('.modal')` 会误命中(desc 显示「默认读取桌面 MCNSkill项目。」)→ 必须限定 `.modal-mask:not([hidden])` 且含 `#aiTopicGen`;且 confirmAiScript 先 await persona 接口再建弹窗,点击后需**轮询等待弹窗**(500ms×24),不能固定 sleep
- 两条「AI写脚本」入口差异(用例 TC-09 记录):#/accounts 每行 `[data-create]` → confirmAiScript(AI 结合人设生成选题=主链路);#/rewrites 每行 `[data-rewrite]` → confirmRun 基于单视频改写(次链路)
- **git 推送策略(17:27 用户明确)**:「不要改一点就推送,半天推送一次就行」→ 已写入用户级 MEMORY.md;本地可随时 commit,push 攒到半天一次
## 俊希用例补充:数据检查 + 界面模拟点击(17:30)
- 用户补充要求:①测试用例需要**模拟点击界面**进行测试;②执行前要**判断项目文件夹和数据库是否已有数据、是否需要清除**
- **数据检查实测结论**(写入用例「二·补」章节):桌面 `MCNSkill项目/俊希/` 仅提示词01(分镜产出)→ 无需清除;达人账号表无俊希 → 首次登记 70014;**工作台 mcn-plugin.db 俊希有历史数据**——hot_accounts id=3(完整账号信息+content 设定文本,source_dir=`D:\dshworkspace\账号解析\俊希` **旧路径已不存在**)、account_videos 108 条(`抖音账号分析\俊希` 旧路径)、rewrite_log 3 条(2026-08-19 海鲜大餐主题);**关键判定:account_persona 表无俊希**(仅 1627-1630 测试占位)→ confirmAiScript 的 hasPersona=false → 弹窗走「先进行账号设定分析」分支,**首次场景成立,无需清除数据库**;dsh 原库(~/.dsh/mcn-plugin.db)同数据但只读红线不写
- **界面模拟点击脚本**:`mcn-work-shop/cdp-test-junxi.mjs`(新写,CDP 模式同 cdp-verify-*:连 9223 → Target.createTarget 新开标签页 → Runtime.evaluate 模拟点击 → 自动关标签页;`--confirm` 参数才真实触发创作任务);覆盖 #/accounts 定位俊希 `[data-create='俊希']` → 点击 → 轮询弹窗 → 点 #aiTopicGen → 轮询选题(100s 上限)→ 读 3 选题
- **实测通过**(安全模式):Step1 定位 PASS / Step2 弹窗结构 PASS(文案=「先进行账号设定分析,再生成完整脚本」首次分支)/ Step3-4 AI 选题 PASS(3 选题:突击妈妈公司送便当/替妈妈筹备周末闺蜜聚会/打工人妈妈病号特权日,贴合亲子Vlog人设)
- ⚠️ **坑**:`.modal` 选择器会被 index.html 隐藏的 `#settingsModal`(hidden 但 .modal 子元素在 DOM)干扰 → 判据须 `[...document.querySelectorAll('.modal-mask')].find(x => !x.hidden && x.querySelector('#aiTopicGen'))`
- **两条 AI写脚本入口差异**(写入用例 TC-09):#/accounts 每行「AI写脚本」(data-create→confirmAiScript)=自定义选题/AI结合人设生成选题(**主链路,对应「AI参考最新视频选题」**);#/rewrites 每行(data-rewrite→confirmRun)=基于视频《Y》改写全新 S9 脚本不复刻(次链路)
## 俊希用例收尾:验收表标注 + 提交(17:32)
- 用例文档验收汇总表 TC-09 行标注「✅ 界面模拟点击已实测 PASS(安全模式)」,真实触发任务需 `--confirm`
- 提交链:86ca4ca(初版用例)→ f320eb4(数据判定+脚本)→ 30fff47(日志)→ ffbdc87(验收表标注);已 push origin main,HEAD=ffbdc87 与远程一致
## AI会话任务链路审计 + P1/P2 修复(17:35-17:50)
- 用户要求:①先检查所有功能调用 AI 会话任务的代码是否正确;②P1 P2 需要修复;③核对「AI 任务执行时对应按钮是否处于处理中状态」的状态代码
- **审计结论(链路整体正确)**:后端 3 接口(/api/run POST 写 automations、/api/run/status GET 轮询、/api/ai/topics AI选题)+ 前端 executeTask/confirmRun/confirmSaveAccount/confirmAiScript 4 函数 + 7 个调用点(账号列表 AI写脚本/周榜分析/首页关注/账号详情改写+提炼/改写页/分镜生成/复盘评分)逐字段核对;automations 写入与既有任务一致(model=deepseek-v4-flash、permission_mode=fullAccess、owner_status=confirmed、once+now、cwds=D:/AgentSkill/mcn-workshop)
- **P1 修复(假等待)**:实测「导入指令」任务 status=PENDING_REVIEW、result_success=0、thread_title=`Automation prompt interrupted: user_cancel`(被中断/待确认)→ server.js `/api/run/status` 将 PENDING_REVIEW 从 pending 拆为独立 `review` 状态;app.js executeTask 新增 `finished` 标志 + review 分支(toast「⏸ 任务待确认,请到左侧会话栏确认执行」+ 停止轮询)+ 30min 超时提示「⏳ 任务仍在执行,请到左侧会话栏查看进度」
- **P2 修复两处**:①server.js `/api/run` INSERT 去掉 next_run_at 列(原写 Date.now() 毫秒,与既有任务全 None 不符,执行器用 scheduled_at/created_at),17 列→16 列;②data-pages.js 删除 firePrompt 死代码(L49-65,无调用者,executeTask 已取代)
- **按钮处理中状态核对(正确)**:executeTask 内 btn.disabled=true + innerHTML='执行中…' + classList.add('btn-busy');失败/完成/超时/review 均 restore(disabled=false + 原 innerHTML + 移除 btn-busy)→ 无遗漏
- **验证通过(17:47)**:新服务启动(node PID 34480,HTTP 200);`/api/run/status?id=automation-1787881991955` 返回 `state:"review"`(修复前映射 pending)→ P1 生效;三文件语法检查通过
- git:本地 commit 本轮修复(按新策略暂不 push,攒到半天统一推)
## 失误沉淀:账号数据来源红线强化(17:51-18:00)
- **失误复现**:俊希全流程测试 TC-01 登记时,直接读工作台库 mcn-plugin.db 的 hot_accounts 表(id=3)拿 sec_uid/抖音号/地址填达人账号表,用户指出「为什么又走到MCP去了 之前不是说过这个问题吗」——同类问题非首次
- **为什么总出问题(根因四连)**:①就近取数惯性(库读取成本低、模型默认走捷径);②规则覆盖缝隙(SKILL.md L50 红线管"抓取流程",Step 1.0 只说"存文本格式"未规定身份标识来源,登记占位阶段钻空子);③同源性未识别(hot_accounts 表 = MCP 内部账号库 list_hot_accounts/hot_account_detail 的本地副本,绕道读 db 拿同一份数据,形式上没碰 MCP 实际同源违规);④前置检查 P4 在 TC-01 阶段就调 MCP auth_status,加剧观感
- **三层化沉淀**:
- 治本:SKILL.md L50「账号信息数据源(红线)」强化——禁止从任何数据库读取账号字段回填账号表(含身份标识);hot_accounts 表=内部账号库本地副本、读其数据=违反红线;登记只占位 账号ID+昵称,身份标识留空待浏览器回填;feature/01 Step 1.0 同步强化;MCP 工具调用严格限定 TC-05 视频解析
- 失误:新建 `references/铁律避坑规则/账号信息获取执行避坑.md`(功能一避坑,含数据来源红线速查表)
- 记忆:本日志 + MEMORY.md mcn-dou-analysis 条目
- **数据纠正**:达人账号表俊希行已清空 C/D/E(抖音号/抖音ID/地址,库来源),只留 70014+昵称占位,待 TC-02 浏览器抓取回填
- dsh 副本(C:/Users/maidou/.dsh/skills/mcn-dou-analysis/)同步:源技能已改,副本待用户授权后同步(.dsh 单向只读红线)
## 失误纠正:视频发布时间提取方法退化 + 主页访问方式(18:35-19:00)
- **用户批评两连**:「为什么打开了两个视频再看」「整一些不纯在的地址去访问,是怕别人不知道你在抓数据吗」——①TC-04 逐条 goto_url /video/{id} 抓发布时间(15 次跳转=爬虫特征);②直接构造 /user/{sec_uid} 地址访问主页(缺 brjmRxiM9i 后缀,访问异常)
- **根因**:08-26 旧梦留声机已验证的 **defaultDataList 方法(一次拿全含 createTime)没有固化到技能文件**,本次凭记忆退化;浏览器规范文档 4d 只写了「逐卡片 awemeInfo」没写 defaultDataList
- **纠正(实测通过)**:主页滚动(.route-sc,136 条链接)→ Fiber defaultDataList(136/136 含 createTime + stats 驼峰 diggCount 等)→ 卡片 awemeInfo 补 duration(毫秒)→ 按 awemeId 合并 → 13 列 Excel(发布时间 100%)→ select-top6 正常出 6 条(旧表发布时间全空导致 select-top6 返回 0 条,根因同源)
- **主页访问正确方式**:搜索页 /search/{账号ID}?type=user → 定位卡片(innerText 匹配抖音号+粉丝数)→ CDP Input.dispatchMouseEvent 模拟点击进入(可能新开标签页 target=_blank)→ 复用该标签页
- **三层化沉淀**:治本=浏览器规范.md「提取方法优先级」+「访问账号主页」两节 + SKILL.md 浏览器操作规范红线⑤⑥ + 部署禁用说明登记;失误=新建 `铁律避坑规则/视频列表获取执行避坑.md`(坑1 逐条开视频页/坑2 构造直达地址 + 校验速查表);记忆=本日志
- 产出:`俊希/videos_full.json`(136 条全量含 createTime/duration/stats)+ `短视频表格.xlsx` 重生成(发布时间 100%)+ `top6.json`(标准工具出 6 条,2026-06-09~08-15)
- 浏览器清理:关闭搜索页/redfox 标签页,仅留俊希主页标签页供后续复用