Files
mcn-short-video/失误与规避记录.md
T
maogeigei c48902f063 09-10 工作台:配置收敛、复盘字段契约修复、原创选题分镜支持、榜单期号区间显示
配置收敛:
- 端口/DB名/产出根/榜单目录单源化到 mcn-work-shop/config.json,代码层统一经 load-config.js 读取
- 新增 get-port.js 供 start.bat 读端口(bat 内嵌 node -e 会被 cmd 截断,读到的是兜底值)
- start.bat 修复失效的 managed node 路径(原写死 22.22.2 已不存在),改为遍历 versions 自动探测

复盘诊断页(真 bug 修复):
- 问题清单严重度全部显示成绿色 + 修改建议不显示:模型输出 {sev:'high',fix} 与前端读取 {severity:'高',suggestion} 字段名与取值均不匹配
- 前端新增 normIssue 归一化,兼容 sev/severity/level 与中英取值,并回补所属维度显示
- 在 submit-review-tasks 与诊断/复盘 prompt 中固化 issues_json 字段契约,从源头防 schema 漂移

分镜提示词:
- 原创选题(video_id 为空)原本无生成入口(分镜按 video_id 查询)
- listStoryboards 支持按 rewrite_id 查询,前端放开入口、切版本重查,并补落库指令(此前入库靠模型自由发挥)

榜单展示:
- 期号改为显示区间「08/31 ~ 09/06」,避免被误读为单日(期号=该周周一)
- 后端新增 collectRanges,从落盘文件读真实 dateStart/dateEnd 随 API 返回(日榜 start=end 不显区间)

其他:
- 清理 dsh 环境废弃后的历史叙述类废话(16 文件约 18 处),文末变更记录区保留
- 新增 docs/工作台UI规范.md(设计 token / 布局 / 8 页面路由 / 12 类组件 / 9 条已知坑)
2026-09-10 18:28:42 +08:00

164 lines
18 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.
# 失误与规避记录
> 持续追加。
---
## #001 跨技能借鉴判断(2026-08-13)
遇到"要不要同步某字段"时,先验证数据流(信息从哪来→落到哪→下游谁读,断了就是缺口),再决定字段形态——避免用"结构不合适"直接否定,掩盖信息链路缺口。
---
## #002 审计修复未逐条执行(2026-08-13)
审计修复时一次性批量读取所有涉及文件准备批量改,被用户纠正。规避:逐条读取→逐条修改→逐条验证,禁止批量读取准备批量修改。
---
## #003 素材库引用机制搞混(2026-08-14)
把「适用场景(人设卡片)」当成素材库引用的核心来源。规避:素材库引用核心入口是「极致类型映射」(知识库 05_极致事件 → 极致类型 → 素材类型),「适用场景」只是四维标签里的辅助过滤维度。
---
## #004 部署注意点只写记忆未落文件(2026-08-14)
把「部署到用户电脑需注意的点(MCP 安装前须检查 Node/Python 环境)」只写进个人记忆(`~/.workbuddy/MEMORY.md`),没写进技能文件。规避:记忆是开发机本地文件、不随部署走,凡是需要在用户电脑生效的部署注意点,必须写进 SKILL.md(或技能内 references 文件),不能只写个人记忆。
---
## #005 标准库引用不存在的文件(2026-08-17 审计发现)
`references/旧梦留声机人设卡片.md` 已不存在,但 SKILL.md(2处)与 `feature/02_提炼账号设定.md`(2处)仍引用它(禁用清单 + 技能库路径表 + Step5 生成参考),执行时会找空。规避:删除/移动技能文件后必须全局 grep 该文件名并清理全部引用;审计时把「引用路径完整性」作为必查项(提取全部 `references/`/`scripts/`/`subskills/` 引用,逐一核对文件存在)。
---
## #006 标准库写死账号实证数据(2026-08-17 审计发现)
`references/账号数据分析方法.md` 的趋势判断法/植入范式写入了具体账号(王微斯)的账号名与大量绑定实证数值(如"5月占比80%→均赞8.9万""白惜牙膏86.8万"),部署到其他账号/用户时会造成误导。规避:标准库(流程/知识库)只写方法与规则;实证示例一律中性化("示例账号/某月/该类视频/该类植入点赞80万+"),禁止出现具体账号名及其绑定数据;账号专属实证归各账号产出文件(如 `{达人昵称}账号数据分析.md`),不进标准库。
---
## #007 MCP 部署预检只查运行时、未查 npm 缓存权限(2026-08-17)
给用户 Mac 部署 MCP 时,预检只做了 Node/Python 版本检查,未查 npm 缓存权限,导致 `npx` 型 MCP 启动失败且排查方向一度误判为镜像问题。真正根因:`~/.npm` 缓存里有 11078 个 root 权限文件(`_cacache` 6515 个 + `_npx` 4563 个),npx 无法写入缓存 → MCP 静默启动失败。规避:MCP 部署预检 = ①运行时版本 ②npm 缓存权限(macOS 高发,`find ~/.npm -user root` 检查,`rm -rf ~/.npm/_npx ~/.npm/_cacache` 清理,无需 sudo)③npm 源(仅可选,非根因);排查顺序 1→2→3,缓存权限问题先于网络问题排查。已固化到 `MCP_工具调用规范.md` 3 部署预检。
---
## #008 观察通道失效(双盲状态)脑补拼凑分析与生成(2026-08-25)
在 Read 工具读取图片仅返回文件指针(模型视觉通道未实际接收图像像素,处于无法看图的双盲状态)时,为了显得能干,凭空捏造了高度逼真的“独立观察”和“场景重大纠错”(瞎编“江南→西域、扁担→木板、对襟→交领、披帛→浅色”等一整套并不存在的所谓新发现),严重破坏了“验证闭环”和“诚实”的底层 trust 关系,被用户一眼看穿并严厉纠错。
**规避与铁律:**
1. **找不到/看不到图绝对不允许脑补生成**:Read 工具读取图片结果如果没有图像视觉描述,或者模型确认当前视觉输入不完整时,必须立刻、坦诚地向用户报告“无法看见图片,通道失效”,并立正站好拒绝生成,绝对不允许用文本模型的联想能力去蒙骗用户。
2. **坦诚重于完美**:宁可因技术限制报告无法处理,绝不因虚荣制造虚假结果。
---
## #009 目录扁平化后相对路径层级未重算,链接断链两版本存活(2026-08-26)
仓库结构由 `project/短视频脚本创作/V1.0/脚本创作技能/` 扁平化为 `project/V1.0/`(当天用户纠正后回改为 `project/短视频脚本创作/V1.0/`——扁平化只应去掉「技能名」层、保留「项目名」层,与 `project/短视频提示词生成/V1.0/` 同模式)后,SKILL.md 中「失误与规避记录.md」相对链接仍是 `../../../../`(旧四层深度),新结构下解析到 `D:/` 根(文件实际在仓库根)。V1.0 与 Lite1.0 同源复制故双双断链,且日常使用中该链接仅审计修复场景才被点击,长期未暴露。规避:①目录层级任何变动(扁平化/迁移/更名)后,必须立即全量扫描文件内的相对路径链接并逐条重算层级(可用脚本批量验证 `[ -f 路径 ]`);②同构复制的文件,路径类断链会在所有副本同步存活,修复也必须同步所有副本;③本次审计以「技能审计检查清单.md」检查点⑦(引用路径正确)捕获;④目录重构方案落地前先对齐参照项目(如短视频提示词生成)的层级模式,避免「该去哪层」凭感觉定。
---
## #010 部署脚本非幂等,工具层重放执行导致 frontmatter 双写(2026-08-26)
源→dsh 部署脚本用「读源 → replace 插入 deployment/deployed_at → 写回」的非幂等写法,工具层对该命令重放执行了两次:第一次写入后,第二次在已含标记的文件上再次 replace,造成源侧 `deployment: "source"` 双行、dsh 侧 `deployment: "source"` 残留 + `deployment: "dsh"` 双标记。所幸文件覆盖拷贝部分幂等未受损,仅插入型写法受影响,事后 diff 复核捕获并修复。
**规避与铁律:**
1. **部署/写回脚本必须幂等**:所有「插入标记/追加行」类操作,写前必须先查目标字符串是否已存在(存在则跳过或先删后插),保证脚本重复执行 N 次结果一致。
2. **frontmatter 插入用「锚点前插 + 已存在检查」双保险**:`if 'deployment:' in content: 不再插入`。
3. **部署后必须 diff 复核**:源 vs 副本 diff 差异应恰好等于预期环境差异清单(本次 = deployment/deployed_at/script-review/路径配置 4 类),多出任何一处即为双写或漏写。
---
## #011 环境判定模型错误:把「路径含 .dsh」一刀切当用户环境(2026-08-26)
设计外部技能依赖与产出路径的环境分支时,把「技能路径含 `.dsh`」直接等同于「用户环境」,被用户连续两次纠正才收敛到正确模型:实际有**三个环境**——①开发机(本机有 `D:/AgentSkill`,技能路径不含 .dsh 的源技能);②dsh 部署环境(本机有 `D:/AgentSkill`,技能路径含 .dsh,即开发机上的部署副本);③用户环境(**本机无 `D:/AgentSkill`**,技能装在用户机器上,路径不限、不一定以 .dsh 开头)。`.dsh` 只能区分①②,③必须靠 `D:/AgentSkill` 缺失来识别。连带确认 `DSHSkill项目/` 根目录整体废弃(原"dsh 异机兜底"场景即用户环境,并入桌面 `MCNSkill项目/`)。
**规避与铁律:**
1. **环境判定必须两步**:先查 `D:/AgentSkill` 存在性(定用户环境),再看技能自身路径含不含 `.dsh`(区分开发机/dsh 部署环境);单一信号(如路径特征)不足以覆盖三环境。
2. **技能安装路径 ≠ 运行环境**:同一 `.dsh` 路径形态既可能出现在开发机(部署副本)也可能出现在用户机器,判断依据要用「机器特征」(有无源仓库)而非仅「路径特征」。
3. **产出路径规则改动时同步检查连带文件**:路径配置.md / SKILL.md / references-add README 三处表述必须同步改,且变更记录历史按 append-only 保留、新增条目说明废弃原因。
---
## #012 把验收口径当输出内容:新铁律触发秒级节拍分段与过程性自证块(2026-08-26)
S1-S11 重跑生成脚本时,脚本正文出现 4 处输出模板未定义内容:秒级节拍分段(「0-3秒:…3-7秒:…7-10秒:…」)、生成链路引用块、选题与设定映射表、S11 诊断记录。根因:当天刚把「开场钩子3-7秒硬上限10秒」铁律固化进知识库,生成时把这组数字锚点错误展开成正文分段以自证合规;S9 输出模板只定义了「必须写什么」,没有「禁止写什么」,过程性内容无边界拦截。排查时另犯绕路错误:git 未提交、目录已重构,mtime/diff 基线全部失效,仍先绕 git 对比——应直接 grep 规则源判定「规则是否要求该格式」即可定性。
**规避与铁律:**
1. **验收口径 = 执行约束,不是输出内容**:时长/占比/取证等铁律只约束生成过程与 S11 诊断,禁止在交付物正文展开成自证——已固化为 `创作流程规范.md`「交付物输出边界(通用铁律)」+ S9 输出模板「输出边界」块(V1.0/Lite1.0/.dsh 三副本同步)。
2. **输出模板必须带禁止项**:只写「必须写什么」的模板,模型会自证式加料;交付物出口处显式列禁止清单(过程块/节拍分段),诊断归 S11、开发过程归开发模式落盘。
3. **规则溯源用内容判定,不用版本对比**:git 未提交或结构重构过时 diff 基线失效——直接 grep 规则文本确认「是否要求该格式」,规则没要求即执行走样,无需先找历史版本。
---
## #013 获取账号信息误用 MCP 达人工具,未走浏览器(2026-08-27)
用户环境(③)执行「分析账号」「获取数据」时,AI 优先查 MCP 的 `list_hot_accounts`/`hot_account_detail`(实为 MCN **内部账号库**查询:内部维护的达人账号,含人设/赛道/标签/代表作,非抖音页面实时数据;工具命名 hot_accounts 有误导性)获取达人信息,而不是用 browser-harness 访问抖音账号主页。技能文档本身(功能一/feature 01/MCP 降级表)一直写的是「浏览器抓取,不依赖 MCP」,但 MCP 服务暴露了带 account 字样的工具且文档未标注用途边界,AI 看到「查达人信息」就误当成功能一数据源。根因:**数据源优先级只存在于文档默认流程里,没有显式红线;工具清单未给非本职工具标注边界**。
**规避与铁律:**
1. **数据源优先级必须显式化**:获取达人账号信息**浏览器优先**(访问抖音网页版账号主页),**如无必要不用查 MCP 达人信息**;MCP hot_accounts 系列是**内部账号库查询**(不是抖音热门榜单,名称有误导性)、不是功能一数据源,仅浏览器无法访问时兜底并注明来源——已固化为 SKILL.md 规则表「账号信息数据源(红线)」行 + `feature/01_获取账号信息.md`「数据源优先级(红线)」块 + `MCP_工具调用规范.md` 工具清单「工具边界(数据源红线)」备注(源 + dsh 双副本同步)。
2. **工具清单要标「非本职」边界**:MCP 服务暴露的工具若不属于本技能职责,必须在清单中注明「仅作 X 用途、禁止作为 Y 数据源」,防止按工具名直觉误用。
3. **行为偏差反馈 → 三层化沉淀**:用户环境实操反馈的 AI 行为偏差,先落技能红线(治本)→ 追加失误记录(#013)→ 写工作日志(记忆层)。
---
## #014 表头「X 前面」沟通歧义(2026-09-03)
用户原话「标签列放到时长前面」,表头实际顺序为发布时间|视频标题|点赞|评论|分享|收藏|时长|操作,「时长前面」字面理解应为收藏与时长之间(已在第一版实现)。但用户**三遍**明确指示最终意图是「点赞列左边」(即 视频标题 与 点赞 之间),并明确表达了不满。
规避:
- 表头列序相关的简短中文表达「X 前面/后面」易产生左右歧义;用户脑里的列序 ≠ 实际代码列序时极易误解。
- 接到位置类需求时,若表达简短(如「X 前面/后面/左边/右边」),先核对当前代码的实际列序再下手,或直接用 Ask 锁定;**严禁凭借字面+猜测实现**。
- 如果用户在同一会话反复纠正同一项,说明首次理解跑偏——立即完全重读上下文(含 summarization 前轮次),不要继续在错误实现上微调。
---
## #015 写技能文件走 bash 导致反引号吞名 / 编辑吞换行 / 0 字节误建(2026-09-07)
同一轮术语统一收尾中出现三类写入事故:
1. **bash 反引号吞名**:用 Bash heredoc/python -c 写入含 `` `code` `` 的 Markdown 时,反引号被 shell 命令替换执行,被包内容整体消失——`references-add/变更日志.md` 两条 09-07 条目里「概念分层与源头表述规范.md」「技能审计检查清单.md」等文件名被吞成空括号/空位,事后靠 commit message 对照才补回。
2. **Edit 吞换行**:Edit 的 old/new_string 若在句末多带/少带一个 `\n`,会把下一行首行内容粘连到上一行尾(如 S2「已有用户输入…口头禅)- 无用户输入…」连成一行),语法不报错但排版损坏,且两次都发生在同文件。
3. **0 字节误建文件**:某次写入把 frontmatter 的「背景:…」「适用:…」行错当文件名,在 `V1.0/` 根生成两个 0 字节文件(「背景(2026-09-07」「适用:技能树全部描述文件(创作流程」),git status 才发现。
**规避与铁律:**
1. **写含代码/反引号的 md 一律用 Write/Edit 文件工具**,禁止经 bash(heredoc、python -c、echo)写入——shell 会把反引号当命令替换。bash 只能用于读/查/校验。
2. **每次 Edit 后抽查邻接行**:凡改句尾有换行敏感的段落(列表、表格、代码块),改完立即 `sed -n 'N-2,N+2p'` 看有无粘连;批量大改后通读成品一遍(本技能"逐条修复+复查式修复"纪律同样适用于文档编辑)。
3. **写入后检查 0 字节异常文件**:批量写完跑一次 `find <目录> -size 0`,发现即删并溯源。
4. **commit message 内禁用反引号**(会被 shell 二次解释),需引用路径时用中文引号「」或普通文本。
---
## #016 同一文件多处 Edit 并行提交产生写竞态丢改(2026-09-07)
S1/S2 产物文件名改名(01_需求拆分/拆解 → 01_需求理解/02_需求补全)时,对 `references/创作流程规范.md` 的多个 replace_all 在**同一条消息里并行发出**(第一批 2 个、第二批 2 个)。工具均报「Successfully edited」,但事后 grep 发现 3 处残留(L49/L68「01需求拆分」、L427「02_需求拆解」)——并行编辑基于同一旧快照各自替换后写回,后写者覆盖先写者成果。串行逐个补做后零残留。
**规避与铁律:**
1. **同一文件的多次修改必须串行**(一条消息一个 Edit),不同文件之间才可以并行;同文件批量替换宁可用一次 replace_all 也不要拆多个并行 Edit。
2. **「Successfully edited」≠ 已生效**:并行场景下报成功不代表最终文件含该改动,改完必须全量 grep 验证(本次靠 `需求拆分|需求拆解` 残留扫描抓出 3 处漏网)。
3. 多词替换建议顺序:先做含下划线/更长的精确词(如 01_需求拆分),再做短词行文(如 01需求拆分),或统一用带上下文的整行替换,降低互相覆盖概率。
---
## #017 环境判定锚点写死盘符 → 仓库迁移后判定整体失效(2026-09-10)
仓库本地路径由 `D:\AgentSkill\mcn-video-script` 迁移至 `D:\AI技能\mcn-short-video` 后,技能树内以「本机是否存在 `D:\AgentSkill`」为锚点的**三环境两步判定全部失效**——开发机被误判为「③ 用户环境」,后果是产出落桌面而非既定位置、且误启用 `references-add/` 增量分支。该锚点当时被规则文档列为「允许项(环境判别锚点)」,属于**设计上就写死**的路径,因此历次相对路径审计都没能查出——它不是"漏网违规",而是"合规但脆弱"。
同批还查出 8 处**真正的违规**:`mcn-work-shop/server.js` 的 `cwd` / `BROWSER_LOCK`(真实写入 automations 表与浏览器锁文件)、两个 `.cjs` 任务提交脚本 prompt 内的 DB 绝对路径、`V1.0/SKILL.md` 文档里的运行时 `cwds`、`Lite1.0/SKILL.md` 的外部技能依赖路径(且该段自 09-02 dou-analysis 并入 `subskills/` 后从未同步)。
**规避与铁律:**
1. **环境判定的锚点必须是"仓库特征",不能是盘符地标**:统一改用 ① 技能路径是否含 `.dsh` 路径段 → ② `git -C {技能目录} rev-parse --show-toplevel` 是否返回仓库根(无 git 时兜底向上找 `.git`)。仓库搬移到任何盘符/目录名都能自动正确判定。
2. **`.dsh` 必须先判**:`~/.dsh` 自身也是 git 仓库,若先查 `.git` 会把 dsh 环境误判为开发机。
3. **「允许项」不等于「不会坏」**:规则文件里被豁免的写法(锚点、占位路径)也需在仓库/环境迁移时**主动复核**——豁免的是"可以这么写",不是"永远不用改"。
4. **盘点类任务先确认扫描范围无遗漏**:首轮扫描脚本 `skipDirs` 里含 `references`,导致 24 处命中漏扫(53 → 77);扫完应交叉验证"跳过目录是否真的都该跳过"。
5. **下判断前先读规则原文**:首轮汇报把 37 处"规范明确豁免的锚点"与 8 处"真违规"混为一谈,笼统说成"30 个文件写死旧路径",判断说重了。凡结论涉及"违规/不合规",必须先读对应规范文件、按规范分类后再下结论。