# 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**:`
账号周榜
` → `.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 行模板**:`` → ``(文案统一 + 去掉 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),供 `
` 渲染 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 与远程一致