Files

249 lines
22 KiB
Markdown
Raw Permalink Normal View History

# 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 看效果?