Files
mcn-short-video/P1修复方案_V1.0_20260914.md
maogeigei f77735b206 工作台:目录改名 mcn-workshop + 任务进度可见 + 会话归属配置化
1. 目录 mcn-work-shop -> mcn-workshop(空间分组名取会话 cwd 的目录名,只改字符串无效,必须真改名)
2. 全仓替换 mcn-work-shop -> mcn-workshop:37 文件 121 处;历史日志按沿革句规矩保留当时目录名
3. 任务进度可见:/api/run/status 产出 已运行时长/工具调用/最近动作/停滞判定(读会话日志尾部),前端新增右下角常驻面板,四处任务入口接入
4. 会话归属目录配置化:新增 config.sessionCwd(留空=工作台自身目录),现指向 D://AI技能//mcn-workshop,使任务显示为命名分组而非「未分组任务」
5. 修前端轮询静默缺陷:连续 3 次查询失败即提示服务断开(原逻辑静默空转到 15 分钟超时,用户零感知)
2026-10-08 13:09:06 +08:00

250 lines
22 KiB
Markdown
Raw Permalink 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.
# P1 修复方案 · 短视频工作台 V1.0
> 依据:`技能审计报告_V1.0_20260914.md`(P0=0 / P1=8 / P2=7)
> 范围:**仅 8 条 P1**。本文件是方案,**未动用任何技能文件**(遵守「方案与执行分离」P0)
> 生效前提:用户确认后方可执行;执行时按 `创作流程规范.md` §七「逐条读取→逐条修改→逐条验证」,禁止批量读改
---
## 〇、修复原则(先定规矩,避免越修越乱)
| 原则 | 含义 | 反例(本方案禁止的做法) |
|------|------|------|
| **改源头,不打补丁** | 概念的身份/来源/去向写在**产生它的环节正文**;下游只引用 | 在 S7 里加"注:S6 模板A/B 其实不是场次结构表字段"的括注 |
| **单源化** | 同一规则只允许一个权威定义处,其余位置改为指向 | 在 SKILL.md 与规范里各写一遍八类35项门禁条件 |
| **删历史叙述** | 规则正文里"何时改的、以前什么样、已下线"一律删;护栏只留"禁止做什么" | 保留"09-10 起 dsh 已废弃" |
| **不动白名单** | ①工作台 API 命名空间 `/api/dsh/*`(与 dsh 部署环境无关)②第三方原样分发包(browser-harness / lieflat-charts / mcn-video-prompt·参考skills / nuwa-skill-main)③各文件文末「变更记录」区 | 把 `/api/dsh/accounts` 当 dsh 残留删掉 |
---
## 一、总览
| # | P1 问题 | 改文件数 | 改处数 | 风险 | 是否需你裁决 |
|:--:|------|:---:|:---:|:---:|:---:|
| 1 | S6→S7 模板骨架断链 | 1 | 2 | 低 | 否 |
| 2 | 契约表漏 2 个 AI 入口 | 2 | 5 | 低 | 否 |
| 3 | 八类35项强制 ↔ S11 可选 门禁冲突 | 3 | 4 | **中(P0 条款)** | ✅ 需确认口径 |
| 4 | 钩子家族术语 4 叫法 | 2 | 8 | 低 | 否 |
| 5 | 规范内旧技能名 + 乱码 | 1 | 2 | 低 | 否 |
| 6 | S5 输出声明漏字段 | 1 | 1 | 低 | 否 |
| 7 | dou-analysis 侧 dsh 死分支 | 5+1 重写 | 6 | **中(接口语义)** | ✅ 需选 A/B |
| 8 | 「dsh 已下线」历史叙述未清 | 7 | 8 | 低 | 否 |
**去重后共涉及 15 个文件、36 处。** 建议分 3 批(见第五节),批内可并行、批间串行验证。
---
## 二、逐条方案
### P1-1 | S6→S7 模板骨架断链
**现象**
- `references/创作流程/7_生成短视频大纲.md:31`:「选择模板后,**从 S6 场次结构表中取**对应的模板骨架(三段式参考 S6 模板A,五段式参考 S6 模板B)」
- `references/创作流程/6_生成短视频框架.md:280`:「以下模板A/B仅供知识参考,非执行指令…S6 不选择模板」
**根因**:一句话里塞了两个来源——"S6 **场次结构表**"是 S6 的**输出实例**(8 列 × 实际场次),不含模板骨架;真正的骨架是 S6 文件末尾的**模板A/模板B 两张空表**。前半个主语写错了,导致下游按"场次结构表里找模板"执行必空手。
**最佳方案:只修措辞,不搬迁内容。**(理由:模板A/B 是**填表骨架**,与 `知识库/03_框架节奏/01_标准爆款结构模板.md` 的**方法论描述**不是同一层东西——搬过去反而制造新的重复定义,违背检查点 15。)
| 位置 | 现状 | 改为 |
|------|------|------|
| `7_生成短视频大纲.md:31` | `> 选择模板后,从 S6 场次结构表中取对应的模板骨架(三段式参考 S6 模板A,五段式参考 S6 模板B),在此基础上展开分段结构。` | `> 选择模板后,按其场次骨架展开分段结构——三段式骨架 = `6_生成短视频框架.md` 的「模板A:三段式通用框架」,五段式骨架 = 同文件「模板B:五段式爆款框架」(骨架定义在 S6 文件末尾参考区,S6 自身不选模板)。` |
| `7_生成短视频大纲.md:20` | `### 第一步:结构模板选择(从 S6 移入)` | `### 第一步:结构模板选择`(删变更动作叙述) |
**验证**:`grep -n "从 S6 场次结构表中取" references/` 应零输出;人工通读改后一句,确认指向的是**文件内的模板A/B 小节**而非场次结构表。
**影响面**:S7 是自动/共创/开发三模式共用的执行文件,改动纯措辞,不改变产出结构。Lite1.0 无此文件,不涉及。
---
### P1-2 | 契约表漏登记 2 个 AI 入口
**现象**
- `mcn-workshop/docs/AI会话任务输入输出对照.md`:入口表只有 1–9 行(9 为 clarify,非任务);L127 声明「前缀常量 = CREATE/EXTRACT/STORYBOARD/REVIEW + ACCOUNT」;检查清单第 1 项同样只列 5 个。
- 实际 `mcn-workshop/public/data-pages.js` 还有两个入口:
| 入口 | 触发点 | 前缀常量 | skills | label | 代码位置 |
|------|------|------|------|------|------|
| 功能四:账号数据分析 | 账号详情「数据分析」tab 空态按钮 `[data-analyze]` | `SKILL_HINT_ANALYZE` | `['mcn-dou-analysis']` | 分析指令 | `data-pages.js:1303-1312` |
| 功能五:视频解析 / 刷新 | 视频详情「解析/刷新」 | `SKILL_HINT_VIDEO_PARSE`(刷新时追加 `VIDEO_REFRESH_OVERRIDE`) | `['mcn-dou-analysis']` | 解析指令 | `data-pages.js:1719-1733` |
**根因**:09-02 定契约时只覆盖了当时已固化的 5 类入口;09-03/09-04 新增的功能四、功能五入口**没有回填契约表** → SKILL.md 第 7 条(P0「新增/修改任何入口时先读此表」)的护栏自身漏口。
**最佳方案:补登记 + 加一道"表与代码对齐"的自检动作。**
| # | 位置 | 改动 |
|:--:|------|------|
| 1 | `对照.md` 入口表 | 新增 10、11 两行,字段同现有格式:`10 \| 账号详情(#/account/:id)数据分析 tab 空态 \| 账号数据分析 \| 分析指令 \| ['mcn-dou-analysis'] \| SKILL_HINT_ANALYZE \| 功能四;近4个月数据逐条拆解+汇总分析;带 connectorIds(缺存量解析时现场 MCP 解析) \| data-pages.js ~L1303` ;`11 \| 视频详情(#/video/:id)解析/刷新 \| 解析视频 / 重新解析 \| 解析指令 \| ['mcn-dou-analysis'] \| SKILL_HINT_VIDEO_PARSE(刷新追加覆盖语义段) \| 功能五;MCP 内容解析产 content+analysis;刷新必须整段覆盖不许判断"是否需更新" \| data-pages.js ~L1719` |
| 2 | `对照.md:127` 关键细节 | 常量清单补全为 `SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ANALYZE/VIDEO_PARSE/ACCOUNT`,并注明**权威来源 = data-pages.js / app.js 顶部实际声明**(行号会漂,故不给行号,只给文件) |
| 3 | `对照.md:137` 检查清单第 1 项 | 前缀对应关系补 `分析=ANALYZE、视频解析=VIDEO_PARSE` |
| 4 | `对照.md` 新增入口检查清单 | 追加第 8 项:`[ ] 表码对齐:本次新增/改动的入口已回填本表入口表行(含 skills / 前缀常量 / 代码位置),并核对 server.js BROWSER_HINT 正则不被误命中` |
| 5 | `SKILL.md:81` | `(SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ACCOUNT,分别对应 创作/提炼/分镜/复盘/账号抓取)` → `(SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ANALYZE/VIDEO_PARSE/ACCOUNT,分别对应 创作/提炼/分镜/复盘/账号数据分析/视频解析/账号抓取;完整清单以 mcn-workshop/docs/AI会话任务输入输出对照.md 为准)` |
**验证**:
1. `grep -c "SKILL_HINT_" mcn-workshop/public/data-pages.js mcn-workshop/public/app.js` 得到的常量名集合 = 对照表清单,一一对应无缺;
2. 逐个入口 grep `skills:` 与表内 skills 列一致。
**风险**:低。纯文档补登记,不改代码逻辑。
---
### P1-3 | 八类35项「交付前强制」↔ S11「可选」门禁冲突 ✅需你裁决
**现象**
- `references/创作流程规范.md:97`(P0):「无论何种模式,脚本交付(Gate-6 / 自动模式生成创作回顾)前**必须**完成八类35项自检;其中前3秒钩子、人设一致性、设定承接、教程完整链为一票否决项——**不过禁止生成创作回顾/交付**」
- `SKILL.md:296-298`:「步骤 11:脚本检查和诊断 🔶 **可选步骤**…S11 是可选质检,**由用户决定是否执行**」
- `references/创作流程/11_脚本检查和诊断.md:20-22`:八类35项扫描被放在 **S11 第〇步**执行
**根因**:清单的**执行环节**被放在 S11(一个可选步骤)里,但**门禁强度**由规范按"交付前强制"定义。执行承载者与约束强度错位 → 用户不点 S11,交付闸门就形同不存在;而按规范,不过是不许交付的。两条都是"权威"(SKILL.md 是红线层,规范是跨步骤通用机制层),互相打脸。
**最佳方案:按"闸门 / 报告"拆开,各归其位,只留一处定义。**
> 判据来自规范自己的 L183:「验收口径 = 执行约束,不是输出内容…诊断与取证过程归 S11,不进入 S9/S10 交付物」——即**执行可以前置,输出仍归 S11**。
| # | 位置 | 改动 |
|:--:|------|------|
| 1 | `创作流程规范.md:97`(权威定义处,只此一处写全) | 明确执行环节与输出边界:`脚本交付前必须完成八类35项自检——**执行环节 = S9 脚本产出后静默执行**(结果不进 S9 交付物,沙盒内自用;不过则按一票否决项处理,禁止进入 Gate-5/交付);S11 诊断(可选)复用该结果并追加四维度评分与专项深诊。自动模式返工上限 2 轮…` |
| 2 | `SKILL.md` 步骤 9 段(L272-280) | 在「用户确认:Gate-5」前补一句:`> 🔴 交付前强制自检:S9 脚本产出后必须静默执行八类35项自检(一票否决项不过禁止进入 Gate-5;结果不写入交付物,判定标准见知识库 09_脚本诊断/脚本质量自动检查清单_八类35项.md)` |
| 3 | `SKILL.md` 步骤 11 段(L296-298) | 保留 🔶 可选,但把「可选」限定到报告层:`🔶 S11 = **可选增强**:八类35项自检已由 S9 收尾强制完成,S11 在此基础上做四维度评分、故事成立性与最终审核报告;由用户决定是否执行。` |
| 4 | `11_脚本检查和诊断.md:20-22` | 第〇步加注:`> 该扫描属交付前强制闸门(S9 收尾已执行一次);S11 执行时**复用 S9 结果**,仅当脚本在 S11 期间被修改才重跑` |
**验证**:三处表述互不重复定义、只指向规范;`grep -n "八类35项" SKILL.md references/创作流程规范.md references/创作流程/11_*.md` → 门禁条件只出现在规范 L97 一处,其余两处为引用。
**⚠️ 需你确认的点**:S9 静默自检 + S11 报告可选的拆分,是否符合你的原意?另一条可选口径是**把 S11 整体改为强制**(则与自动模式"只落最终交付物"的轻量设计冲突,不推荐)。
---
### P1-4 | 钩子家族术语 4 叫法
**权威**:`references/规则/概念分层与源头表述规范.md` §三——「对外使用的统一总称只保留一处(**开场钩子**);细分概念各用职责名(**开场方式**=开场内容策略、「**本场钩子**」=留人机制);改名必须一次覆盖全链路」。
**现状残留**(S5 模板字段已是正确的「开场钩子」,其余为旧词):
| 位置 | 现状 | 改为 |
|------|------|------|
| `SKILL.md:223` | `选题方案(含切入角度/爆款逻辑/**钩子预设**/共鸣切入点)` | `选题方案(含切入角度/爆款逻辑/**开场钩子**/共鸣切入点;字段完整清单以 5_生成短视频选题.md 输出模板为准)` |
| `5_生成短视频选题.md:187` | `**4.3 开篇钩子预设(选题吸引力前置判断):**` | `**4.3 开场钩子预设(选题吸引力前置判断):**` |
| `5_生成短视频选题.md:166` | `→ 全部通过 → 进入钩子预设` | `→ 全部通过 → 进入开场钩子预设` |
| `5_生成短视频选题.md:229` | `- 每个方案预设的钩子策略` | `- 每个方案预设的开场钩子(开场方式 1-2 种)` |
| `5_生成短视频选题.md:255` | `- 每个选题预设至少 1 种开篇钩子策略` | `- 每个选题预设至少 1 种开场方式(写入「开场钩子」字段)` |
| `5_生成短视频选题.md:265` | `…和钩子预设要求` | `…和开场钩子要求` |
| `5_生成短视频选题.md:294` | `每个方案须预设至少 1 种开篇钩子策略。` | `每个方案须预设至少 1 种开场方式(写入「开场钩子」字段)。` |
| `5_生成短视频选题.md:411` | `\| 已预设 ≥ 1 种钩子策略 \| ✅/❌ \|` | `\| 已选定 ≥ 1 种开场方式(已写入开场钩子字段) \| ✅/❌ \|` |
**注意**:`5_生成短视频选题.md:192`「S6 用「本场钩子」五类留人机制」与 S6 场次表列名「本场钩子」是**正确用法**,不动。
**验证**:`grep -rn "开篇钩子\|钩子预设\|钩子策略" SKILL.md references/ mcn-workshop/` → 仅允许命中 `references-add/变更日志.md`(历史归档)。
---
### P1-5 | 规范内旧技能名 + 乱码
| 位置 | 现状 | 改为 | 说明 |
|------|------|------|------|
| `references/创作流程规范.md:406` | `…(两目录合并检索,相对于技能根目录 \`脚本创作技能/\`)。` | `…(两目录合并检索,相对于技能根目录 \`短视频工作台/\`)。` | 09-03 已更名;且该处旧名与 SKILL.md:381 记载的旧名(「短视频脚本创作技能」)都不是同一个,属二次走形,统一用现名最稳 |
| `references/创作流程规范.md:408` | `> 知识库更新后,AI 直接读��最新文件内容,步骤文件无需同步修改。` | `> 知识库更新后,AI 直接读取最新文件内容,步骤文件无需同步修改。` | 单字符乱码(U+FFFD),按语义补「取」 |
**验证**:`grep -rn "脚本创作技能" references/ SKILL.md 帮助文档.md` → 零输出(变更日志豁免);`grep -n "�" references/创作流程规范.md` → 零输出。
---
### P1-6 | S5 输出声明漏字段
**现象**:`5_生成短视频选题.md:227` 写「每个含:主题 / 切入角度 / 爆款逻辑 / 差异化 / 人设匹配度 / 目标体感」——**漏「共鸣切入点」「开场钩子」「故事前提」**,且「差异化」与模板字段名「差异化特征」也不一致;而模板(L309-321,9 字段)与规范 L431 都要求全字段。
**最佳方案**:不重复罗列(避免与模板二次漂移),改为指向模板 + 列全一次。
| 位置 | 改为 |
|------|------|
| `5_生成短视频选题.md:227` | `- 5 个选题方案(**字段完整清单以上方「选题方案输出模板」为准**:主题 / 切入角度 / 爆款逻辑 / 差异化特征 / 人设匹配度 / 目标体感 / 共鸣切入点 / 开场钩子 / 故事前提〔剧情/悬念/反转类必填〕)` |
**验证**:人工比对 L227 字段与 L309-321 模板字段一一对应(9/9)。
---
### P1-7 | dou-analysis 侧 dsh 死分支 ✅需你选 A/B
**现象**(dsh 环境 09-10 已整套下线,`~/.dsh` 与 `D:\dshworkspace` 均不存在)
| 位置 | 内容 |
|------|------|
| `mcn-dou-analysis/SKILL.md:160` | 「可选写库:**① 环境有 MCN 插件接口(dsh)时补录 `account_video_source` 并提取选题;②** 工作台环境…`POST /api/import/account`」 |
| `references/feature/05_解析视频.md:55` | 「若当前环境有 MCN 插件接口(`/mcn/api/video/source/backfill`,可用 pwsh 调用,基地址 `$env:DSH_WEB_URL` 或 3081/3080)…接口不可用时跳过」 |
| `references/接口调用/本地接口调用规范.md`(整份 23 行) | 基地址判定 = `$env:DSH_WEB_URL` → 3080/3081;接口清单 = `/mcn/api/account/videos`、`/mcn/api/external/import`、`/mcn/api/account/update` |
| `references/铁律避坑规则/账号设定执行避坑.md:12, 25` | 规则 3 用 `GET /mcn/api/account/videos` 探测连通;规则 6 记载该规范的沉淀来源 |
**根因**:09-10 的卸载只覆盖了主技能层与路径判定层(`路径配置.md`、`SKILL.md` 数据边界),**dou-analysis 的写库接口层漏了**——而它是被"功能三/五执行"实际读取的活文件。
**方案 A(推荐)|改写为工作台接口规范——保留沉淀价值,接口跟着平台走**
| # | 位置 | 动作 |
|:--:|------|------|
| 1 | `references/接口调用/本地接口调用规范.md` | **重写**为《工作台接口调用规范》:① 基地址 — 从 `mcn-workshop/config.json` 的 `port` 读(默认 8900,`server.js` 支持 argv 覆盖),禁写死端口;② 写库接口 — `POST /api/import/account`,body `{"account":"{达人昵称}"}`,落库映射见 dou-analysis SKILL.md:160;③ 保留「大文本用 Python urllib + `json.dumps(ensure_ascii=False)` 直连,禁 PowerShell `ConvertTo-Json`」这条铁律;④ 接口清单**不另抄一份**,指向 `mcn-workshop/docs/AI会话任务输入输出对照.md` + `server.js` 路由为权威 |
| 2 | `references/铁律避坑规则/账号设定执行避坑.md:12` | 探测方法改为「用 `GET http://127.0.0.1:<工作台端口>/api/dsh/stats` 探连通,不用写接口探测」 |
| 3 | `references/铁律避坑规则/账号设定执行避坑.md:25` | 沉淀描述改为「新建 `references/接口调用/本地接口调用规范.md`,记录工作台接口基地址判定、写库接口与请求构造方式」 |
| 4 | `feature/05_解析视频.md:55` | 整句改为「解析结果对应「原视频解析」数据:落盘后调用工作台 `POST /api/import/account`(body `{"account":"{达人昵称}"}`)把 `content.json` 补录进 `account_video_source` 并提取选题(topic);工作台未启动时跳过(不影响本地保存)。」 |
| 5 | `mcn-dou-analysis/SKILL.md:160` | 删「① 环境有 MCN 插件接口(dsh)…;②」序号与前半句,保留工作台单一分支述为「**可选写库(工作台环境)**:…」 |
**方案 B | 整体下线该规范文件**:删除 `本地接口调用规范.md`,同步清理 3 处引用(`账号设定执行避坑.md:12/25`、`SKILL.md:160`),接口调用一律改为指向工作台契约文档。**优点**:文件更少;**缺点**:丢掉"大文本禁 ConvertTo-Json"这条用血换来的铁律。
> 我的判断:**选 A**。这条铁律与平台无关,是通用工程约束,值得留在技能里。
**验证**:`grep -rn "/mcn/api\|DSH_WEB_URL\|3080\|3081" subskills/mcn-dou-analysis/` → 零输出;重写后人工确认新基地址来自 config.json 而非写死。
**⚠️ 需你选 A 还是 B。**
---
### P1-8 | 「dsh 已下线」历史叙述未清
**判据**:09-10 已确立的处置原则——① 规则/prompt 正文里的历史叙述**全删**;② 陈述"不存在的事物"**删**;③ 禁止性护栏**精简保留**(去掉日期与下线经过,只留"禁止做什么");④ 文末「变更记录」区保留。
| # | 位置 | 现状 | 改为 |
|:--:|------|------|------|
| 1 | `SKILL.md:78` | `(**dsh 侧已整套下线(09-10):\`~/.dsh/mcn-plugin.db\` 与 \`D:\dshworkspace\` 均不存在**,工作台 DB 为唯一读写副本)` | `(工作台 DB 为唯一读写副本)` |
| 2 | `mcn-dou-analysis/SKILL.md:42` | `…**权威台账 = 数据目录的桌面 \`MCNSkill项目/达人账号表.xlsx\`(开发机与用户环境同构);dsh 侧已整套下线(09-10:\`D:\dshworkspace\` 不存在),其遗留表不再作为任何来源**。` | `…**权威台账 = 数据目录的桌面 \`MCNSkill项目/达人账号表.xlsx\`(开发机与用户环境同构)**。` |
| 3 | `mcn-dou-analysis/references/路径配置.md:15` | `> **09-10 起 dsh 部署环境已废弃**(…)——不再有 dsh 分支与 \`D:\dshworkspace\解析任务\\\` 产出路径。历史条目见文末「变更记录」。` | **整行删除** |
| 4 | `mcn-dou-analysis/references/路径配置.md:28` | `- ⚠️ **不存在 dsh 分支**:dsh 侧已整套下线(09-10),不要再按 \`.dsh\` 路径段或 \`D:\dshworkspace\` 做任何分支判断` | `- ⚠️ 禁止按 \`.dsh\` 路径段或 \`D:\dshworkspace\` 做分支判断`(护栏精简保留) |
| 5 | `mcn-dou-analysis/references/路径配置.md:56` | `…**两者同构**,均无 dsh 分支)` | `…**两者同构**)` |
| 6 | `mcn-dou-analysis/references/feature/06_生成账号设定卡片.md:50` | `(**无 dsh 分支**,以 … 为唯一权威)` | `(以 … 为唯一权威)` |
| 7 | `mcn-dou-analysis/references/浏览器搜索抖音账号操作规范.md:175` | `…(主技能 \`短视频工作台/subskills/browser-harness/\`;**09-10 起无 dsh 部署环境**;如缺失可从…)` | `…(主技能 \`短视频工作台/subskills/browser-harness/\`;如缺失可从…)` |
| 8 | `mcn-data-insight`:`references/规则/抖音数据规则.md:61`、`scripts/fetch_week_ranks.py:53`、`subskills/douyin-*/SKILL.md` 数处 | 同类「无 dsh 分支」括注 / docstring 注脚 | 同类处置:正文括注删;代码 docstring 只留定稿日期或删(按 09-10 原则②) |
**验证(一次扫净)**:
```
grep -rn "dsh 侧\|dsh 部署环境\|dsh 环境\|无 dsh 分支\|不存在 dsh" SKILL.md references/ references-add/ subskills/ --include=*.md --include=*.py --include=*.js
```
预期:仅 `references-add/变更日志.md` 与各文件「变更记录」区命中(历史归档豁免)。
**⚠️ 白名单提醒**:工作台 API 命名空间 `/api/dsh/*`(`/api/dsh/accounts`、`/api/dsh/stats`、`/api/dsh/ranking`…)与 `dsh-data.js`、`isDshDeploy`(后者已删)**不是** dsh 部署环境残留,**不可动**。
---
## 三、执行顺序(依赖关系)
```
批次 A(口径统一,先做——后两批都要引用改后的口径)
P1-1 → P1-6 → P1-4 → P1-5 → P1-3(需你确认口径)
批次 B(dsh 收尾,独立可并行)
P1-7(需你选 A/B) → P1-8
批次 C(契约补登记,可与 A/B 并行)
P1-2
```
每处改完立即验证;同一文件的多处修改**必须串行**(09-10 曾在并行 Edit 同文件时发生写竞态导致丢改)。
## 四、收尾沉淀(修复完成时一并做)
| 动作 | 落点 |
|------|------|
| 记录本轮 4 类失误(断链/契约漏登记/门禁错位/术语改名未覆盖) | `失误与规避记录.md` 追加条目 |
| 登记本次修复 | `references-add/变更日志.md` |
| 更新 frontmatter | `V1.0/SKILL.md` 的 `updated_at` + `last_change` |
| 审计结论回填 | `技能审计报告_V1.0_20260914.md` 各条标「已修」+ 验证命令输出 |
## 五、等你拍板的三件事
1. **P1-3 口径**:接受「S9 静默自检(强制闸门)+ S11 报告(可选)」这个拆法吗?
2. **P1-7 选型**:接口规范**重写为工作台版(A,推荐)**,还是**整体下线(B)**?
3. **执行授权**:确认后我按批次 A → B/C 逐条改、逐条验;还是你想先只做批次 A 看效果?