diff --git a/.workbuddy/memory/2026-10-11.md b/.workbuddy/memory/2026-10-11.md index ad1aa03..e93668b 100644 --- a/.workbuddy/memory/2026-10-11.md +++ b/.workbuddy/memory/2026-10-11.md @@ -114,6 +114,20 @@ - 📌 **索引的维护是「靠人记得」的状态** —— 「每个目标收口时更新一次」这条目前**没写进机制**(检查会话的派活模板里没有这一项)⇒ 已立成待拍板。 - 📌 顺带确认:`执行会话/` 下共 **13 个**目标目录;其中带方案类 md 的有 11 个(另有 `d85687`/`5199a6` 只剩状态文档)。 +## 20:2x–20:5x · 用户定「两态结构」并令写进产品规划规则 ⇒ 整理落盘 + 改技能包 + +- 🔴 **用户令(逐字)**:「**应该有文件夹 专门归档过期文档, 当前文档 统一放在方案文件夹中**」;追加「**这个要记录到 产品规划规则中**」。 +- ✅ **整理落地**(方案文件夹 = `docs/pm/mcn-shortvideo-agent/`): + - **当前权威版 16 份**归位:`research/`(1a 24 317 B/1b 33 401 B)|`prd/`(2a 61 683 B=V5/2b 52 643 B=V5)|`ui/`(原型 153 410 B/DESIGN 66 210 B/实测记录 32 210 B)|`专题/` 9 份(全球平台矩阵/海外热点源查证/热点与选题功能细节/全球版框图与流程图/Easel 逆向/国内口径逻辑关系/两份 GPT 建议)。 + - **过期版 28 份**收进 `归档-过期版/`,命名 `<原名>__<来源目标短哈希>.`:`2a` 5 版/`2b` 6 版/原型 4 版/`DESIGN` 4 版/实测记录 4 版/`1a` 3 版/早期 prd 与 research 旧归档 3 份。 + - `索引-当前权威版.md` 重写:开头写清「方案文件夹=当前、归档-过期版=过期、执行区=过程留痕」,§六 给出**收口四步**。 +- ✅ **规则写进技能**:`E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md` 在 `### 产物落哪` 之后新增 `### 文档的两态:当前版与过期版`(含用户原话、两个文件夹的定义、收口四步、以及「为什么要有这条」的实测避坑依据)。 +- ⚠️ **我自己踩的两坑(都当场修了)**: + - ①插段时拿 `### DESIGN.md 为什么在项目目录、不在仓库根` 当锚点,new_string 里**没把这个标题带回去** ⇒ **标题被吃掉**、其正文变成孤儿(`git diff` 里看出 `-### DESIGN.md…`)⇒ 已修回,现标题序列正确(`产物落哪` 72 → `文档的两态` 81 → `DESIGN.md 为什么…` 96)。**教训:用标题作锚插入内容时,锚点必须原样保留。** + - ②`research/` 的白名单只许 `1a`~`1e` 五个标准名 ⇒ 我放的 `1b-竞品分析-汇总对比体.md` 触发闸门 **FAIL 1** ⇒ 改名 `1b-竞品分析.md`(内容一字未动)后 **2061|0|27** 全过。 +- ⚠️ **技能仓现场**:多会话并发写 —— `git status` 里另有别人未提交的 `browser-harness/SKILL.md`、`session-mechanism/SKILL.md`、`.gitignore`、video-capture 两个脚本删除等;我只 add 了自己改的 `product-planning/SKILL.md`。技能仓 ⛔ 无 upstream ⇒ 推送用 `git push origin master`。 + + diff --git a/.workbuddy/memory/MEMORY-压前-20261011-1855.md b/.workbuddy/memory/MEMORY-压前-20261011-1855.md new file mode 100644 index 0000000..6309ace --- /dev/null +++ b/.workbuddy/memory/MEMORY-压前-20261011-1855.md @@ -0,0 +1,72 @@ +# contentm_agent · 项目长期记忆 + +> ⚠️ 本工作区**现名 `contentm_agent`**(2026-10-08 定;旧名 `content_marketing_agent`,再早 `agent-product`)。 +> 整理纪律:**同一件事只在一处写全**,别处只引;细则进当日日志,跨会话有用才上提这里。 +> 🔴 本文件按 **~9 KB 目标**维护;**实测注入在 19 KB 时开始截断**(2026-10-09 只丢末尾数十字符)⇒ 本版压至 ~14 KB 留余量。**再加内容先删等量旧内容**。 +> 压缩史:2026-10-09 压过两次;压前全量存 `MEMORY-压前全量-20261009.md` 与 `MEMORY-压前-20261009-2305.md`。 +> 🔴🔴 **注入进来的副本可能落后于本文件**(2026-10-10 实测):注入版写「浏览器保活=**计划任务**」,而本文件(现行)写「**只许会话后台任务**、⛔ 不建计划任务」——**两版方向正好相反**,照注入版动手=做了用户明令禁止的事(已撤销)。⇒ **动手改机制/建计划任务/动浏览器之前,先读本文件磁盘版对时点**,把注入版当缓存看。 + +## 一、仓与位置 + +- **工作区仓** `E:/ProgramData/AIProject/contentm_agent`:远端 `git@ssh.alotbuy.com:admin/contentm_agent.git`(Gitea,deploy key **有写权限**),分支 `main`;提交者=**局部** `WorkBuddy `(全局 config 未动,可推翻)。参考资料 231M 抽帧素材**全量入库**;`.gitignore` 排运行时噪音。 +- 🔴 **全局技能仓** `E:/ProgramData/.workbuddy/skills` 是**独立仓**:远端 `…/admin/workbuddy_skills.git`,分支 `master`,⛔ **无 upstream** ⇒ 必须 `git push origin master`(`git status -sb` 不显示 ahead);提交者=**全局** `maogeigei`(与工作区仓不同,属正常)。⚠️ 多会话并发写、分钟级推进 ⇒ **用前先 `git log -1` 校准**。 +- 🔴 **浏览器=「只连不起」**:本机 9223 独立 Chrome(保活=**本会话后台任务**跑 `bh_chrome_keepalive.py`)。动手前 `netstat -ano | grep ":9223"` 探;在跑就直连。🔴 **一个页面只开一个标签**。规则见 `skills/browser-harness/SKILL.md`。 +- ⚠️ **本机裸 `bash` 落到 WSL**(路径被吃)⇒ 一律用 `E:/ProgramData/.workbuddy/binaries/PortableGit/versions/1.2.0/usr/bin/bash.exe`。 +- 🔴 **本机 curl 取 GitHub**:`raw.githubusercontent.com` **连不通**(`rc=56`)⇒ 走 `api.github.com/repos//contents/`(base64)+ `git/trees/?recursive=1`。公开接口够用,⛔ 不为取数起浏览器。 + +## 二、产品规划四段流水线(slug `mcn-shortvideo-agent`) + +- **四段次序不可跳**:①产品需求(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)→ ②产品功能 → ③界面交互 → ④原型说明文档。①段落 `docs/pm/mcn-shortvideo-agent/research/`(1a 是**汇总型**);1b 在 `content-workbench` 项目下(跨项目引用,⛔ 不重写)。 +- **执行期产物落点**:一律落 `执行会话/目标-<标题前缀>-/`;正式归档 `docs/pm/…/{research,prd}/` 由主会话收口后统一搬。 +- 🔴 **换目标三件套**:带 `--kpi`(不带 ⇒ 旧验收判据原样留下 ⇒ 新目标一声明就判「全过」)+ 换 `tmp/supervise-inbox/NEXT.md`(执行会话开工队列)+ `--switch-goal`(并同步 `collabd.py --set-life`)。派活排期名 `[执行]-[]-<具体>`。 +- 🔴🔴 **平台范围=全球(2026-10-11 用户令 · 适用所有方案)**:用户逐字「**所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)**」。⇒ **任何**平台矩阵/热点源/渠道清单/投放方案,⛔ 都不许只列国内。**主会话自决的清单(可推翻)**:海外 6 = `TikTok`/`YouTube`(含 Shorts)/`Instagram`(含 Reels)/`Facebook`/`X`/`LinkedIn`;国内 6 = `抖音`/`快手`/`小红书`/`视频号`/`B站`/`微博`;共 **12**。⚠️ **现状缺口(2026-10-11 实测)**:`2a`/`2b` **几乎没有平台清单**(`2a` 仅出现「抖音」1 次、`2b` 0 次);选题细节文档(`8a649c`)只提国内(抖音 12/知乎 8/微博 7/小红书 4/B站 4,**海外 0**)⇒ 都按全球口径补。 +- 🔴 **功能归属现行判据(2026-10-09 用户令)**:**同一类事情放同一个页面**(找选题/拆解选题/做选题都属「选题相关的事」⇒ 同在选题页)。两条配套口径:**资产入库不限页**(任何页产生资产都可就地入库,**资产库页=统一管理的地方**,⛔ 不是唯一入库口;「一个对象只有一处产生」管的是**唯一权威数据**、⛔ 不是写入动作的地点);**选题库容纳「对选题有帮助的任何信息」**(随手记仍落选题库,⛔ 不新增「待整理」状态,靠分类区分)。 +- 🔴 **「复盘」=发布之后看结果**:**看数据 + 看收入**(用户 2026-10-09 22:48 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」(发布记录/溯源/对账/商单与收支)**属复盘、是同一类事**,留在复盘页,⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。 +- 🔴 **「账号」是两个概念,现行定义(2026-10-10 用户逐字「内容账号管的是内容属性(主要是账号设定 内容做成什么样),平台账号应该是 发布的渠道三方平台账号 用户发布具体内容」)**:**内容账号**=管**内容属性**(账号设定:定位/风格/受众/偏好红线/长期记忆),**平台不属于它**;**平台账号**=**发布的渠道**(三方平台账号,"发布具体内容"用的就是它),**登录态/授权归它**。⇒「**渠道**」=**平台账号**(⛔ 不再说"账号 × 平台")。**建模(主会话自决、可推翻)**:不加对象,平台账号做成**内容账号下的子项清单**(1 → N,每项带「平台 + 登录态 + 授权状态」)。✅ **2026-10-10 已落地(V4)**:`2b` P6 画像改**五维** + 新增「平台账号」块(框 4→5 块);`2a` `Account` 改「内容账号」+ F7 改名并改「按平台账号展开」、F13 补「一版一路」(`PublishRecord` ⛔ 不加渠道字段)。 +- 🔴 **本区当前目标**(2026-10-11 18:53 声明,用户逐字「**所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)**」)=**按全球口径重做平台矩阵与海外热点源 + 重画框图与流程图**。类别 `产品规划`;目标目录=**机制口径** `执行会话/目标-按全球口径重做平台矩阵与热点源含海外主流-39646d/`。三条判据=平台矩阵含海外并落文档/海外热点源查证落文档/框图与流程图按全球口径重画(均 `未过`)。执行棒 `8d7d02b3` `once` **19:02**。⚠️ 本轮**不动** `2a`/`2b` —— 「要不要把 12 平台矩阵同步进去」待拍板 ⇒ 执行棒只出方案与建议。🔴 **教训(沿用)**:判据只写到「有文档/有图」⇒ 执行棒会按最低标准交出一张占位图 ⇒ **判据要落到「照着能做出来」的粒度**(`8a649c` 已按此复检:框图 77/流程图 41 个文本节点,块内是字段名与公式才算过)。⚠️ 遗留六条改结构项(平台热榜归属/热点事件是否独立成对象/进度 3 或 6 态/收藏热点/数据源管理落点/选题负责人与截止时间)登记在 `NEED-USER.md` 第 6 节等拍板。 +- 🔴 **检查会话补齐状态文档=常规动作**:执行棒只交付产物、不写 `目标执行状态.md` ⇒ 检查会话要「现跑门禁 + 补写文档 + 回写 `--kpi`」三件一起做(`fa6e07`/`20a8ac`/`0a758b` **三次同型**)。🔴 **派棒排期时间必须晚于创建时刻**(早于 ⇒ 宿主不补跑,⛔ 不是调度器坏)。 +- 📌 **已收口的旧目标**(细则在当日日志):①`fc471a` 导航改七项一层并重排归属(10-09 15:48)|②`b49e02` 征询 GPT(10-09 16:46;GPT 原文 10 562 字符逐字留痕;🔴 **D1 待裁定**=GPT 主张拆「记录与对账」出复盘,与用户方向相反)|③`071c5b` 四步(10-09 08:14)|④`fa6e07` 八条口径落②段+原型(10-09 09:34,V4)|⑤`547748` 逆向 Easel 热点雷达(10-10 22:49 被换掉,其棒 `3f59c890` **22:57:58 已收工**,报告 15 KB + 取证 12 份)|⑥`20a8ac` 侧栏 64px + 刷新改 icon(**10-10 23:41 收口=已完成**,三判据全过、依据挂现跑证据)|⑦`0a758b` 梳理热点与选题逻辑+出框图与流程图(**10-11 04:25 收口=已完成**,三判据全过;产物=逻辑关系 md + 框图/流程图 html + 两张 png,全在 `执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/`;遗留 7 处断点只登记未动手,属「补内容」不属「改结构」)|⑧`8a649c` 征询 GPT + 补细节 + 重画图(**10-11 17:22 收口=已完成**;产物=GPT 提问稿 4 492 B + 回复逐字 44 524 B + 细节文档 39 743 B + 框图 25 555 B/77 节点 + 流程图 17 152 B/41 节点,全在 `执行会话/目标-征询GPT对选题板块细节的建议并重画框图-8a649c/`;⚠️ **它是国内口径**,17:22 后按用户全球令已被 `39646d` 接续改造)。⚠️ 两条待订正:机读副本判据写「六维」而②段实际是「五维+平台账号」(采信②段);`--kpi` 按**分号**切 ⇒ 依据里⛔ 不许写 `;`。 + +## 三、②段两份的现行口径(2026-10-09 新版) + +- 改动主线=按「**业务对象 + 数据流转**」解耦(原来「页面=功能=数据」揉在一起)。八页**不推倒**,改的是归属判据。 +- **归属判据**=这个功能主要**创建/改变哪个核心业务对象**(⛔ 不是「哪页有按钮」)。🔴 **11 个对象**=`Account`/`Benchmark`/`Topic`/`Asset`/`Content`/`ContentVersion`/`PublishTask`/`PublishRecord`/`Performance`/`Review`/`Campaign·Order`。F7/F8 收归 **P4**、F14 从 P2 改 **P4**;F11 标「待验证/非主链」、F12 标 `P2/Deferred`。 +- **2b 结构**:新增「**页面公共框架(Page Shell)**」层(不计板块数/不参与归属/不占冻结计数);③段自长的「功能入口」层**撤销**;页面 **7 个**(P1 矩阵总览/P2 选题雷达/P3 资产库/P4 创作台/P5 发布中心/P6 账号画像/P7 复盘台),导航**一层七项**(首页/选题/创作/投放/复盘/账号/资产);流转=**六要素契约**(来源/触发/传递对象/对象ID/接收方式/落地状态)共 **20 条**;骨架冻结升级为**对象冻结**。业务板块 **39 块**。 +- ②段两条老硬约束:功能**按使用场景组织**(不按页面,2026-10-06 定案)|全段**零视觉词**。 +- ⚠️ 计数订正:①棒 §四 A1 写「八页共 38 个板块」,其加总 `5+5+4+6+5+4+6+4` 实为 **39** ⇒ 38 是加总差错。 +- 🔴 **P5 投放页现状(`2b` §五)**:5 板块=目标选择/各版本与逐版编辑/检查结果/确认发布/发布记录;主操作=确认发布。F5 硬闸管敏感信息、软闸管人设一致性(⚠️ 竞品里**没有**「敏感词检测」也没有「事实检测」)。 + +## 四、技能包闸门与改包纪律(`product-planning`) + +- ⚠️ 闸门必须带 `--ws`:`python scripts/check_naming.py --ws "E:/ProgramData/AIProject/contentm_agent"` ⇒ 期望 **通过 2060|失败 0|提示 27**;⛔ 别给 `--root .`。**改包前后都要跑**。 +- 🔴 **单一可信源门禁**:`AUTHORITY` 表登记「会变的事实 → 唯一定义处」,除定义处外复述即 FAIL(现 9 条)。**改这些事实只改权威处,然后跑闸门**;⛔ 写「不复述」时别把名单抄进来(自己踩过)。 +- ⚠️ **改门禁后必须做变异对照**(注一条假病进去确认报红,再还原)。教训:曾因 stale 变量导致「旧名提示」**恒不触发**(假绿)。 +- 🔴🔴 **改包纪律**(技能仓根 `改包纪律.md`):⛔ **不许整文件覆盖**|落地前**比对时点**|改完**必跑闸门**|收到覆盖性提交先做**结构体检**。 +- 🔴 **事故留痕**:提交 `1d7d31a` 用「整文件覆盖」造出 12 条 FAIL ⇒ 2026-10-08 整包回退到 `44d42b0`(技能仓提交 `8fc9a92`),闸门回 `2060|0|27`;那批「说人话」改写另存 `归档/技能包-说人话改写-被覆盖存档-20261008/`(只取措辞,⛔ 不取结构)。⛔ 修法顺序:**先恢复权威处声明,再清复述**。 +- 🔴 **说人话的处置**(2026-10-08 用户选 C):两个技能**不整合进 product-planning**,按技能名引用 —— 模式清单取 `humanizer`|**评分与门槛取 `humanizer-zh` 五维表(≥45/50)**|冲突以 `humanizer-zh` 为准|⛔ 取不到来源时明写「无判据来源,本项未判」。落盘文字一律过说人话并在文末写评分。 + +## 五、③段设计供给(单一可信源) + +- 供给关系**只在** `references/stage-delivery/SKILL.md` 的 `## 供给` 块定义(6 行表);③段其余章节与 runbook/layouts-tooling/总入口提到供给一律引 `§供给·<行名>`,⛔ 不许复述。**改供给只改那一块**,改完跑闸门。 +- **默认主线=`oil-ui-pro`**(方法+独立评审);定调与令牌取③段自带 `assets/design-systems/`(当前 `design-system-tiaoyue`);**`open-design`=可选件**(本地裁剪 Apache-2.0,⛔ 不许改其内容;缺 LICENSE 全文与上游 NOTICE)。无 open-design 时 `craft/` 那 13 份工艺数值判据**无供给来源** ⇒ 明说,⛔ 不编。 +- ③段细目(导航判据 `§5.5.2`、`§4.9` 导航栏、`§5.6` 两条元规则、Gate-3 两条新增)⇒ 读技能包 `layouts-tooling.md` 与 `execution-runbook.md`,本文件不复制。 + +## 六、③段原型 `ui/mcn-workbench.html` + +- 🔴 **细则不在此复制**:口径与断点表在项目内 `ui/DESIGN.md`,全量实测值在 `ui/3d-审查报告.md`。最易踩三条: + 1. **外壳高度链三件套**:`html,body` + `.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}` —— 少写一处 ⇒ 整页「滚不动」。**判滚动四个容器都要核**(`window`/`html`/`body`/`.view`,只核 `window.scrollY` = 假绿)。 + 2. **改原型两条硬坑**:JS 模板字符串里的 HTML 注释**不许出现反引号**(提前闭合模板字面量 ⇒ 静默白屏,而 `node --check` 报不出;已踩 4 次);HTML 注释**必须写 `-->`**(写成 `*/` 会吞掉后面整段)。改完先 `node --check` 再跑自检。 + 3. **几何一改,逐视口密度表整表重跑**,且改前先落「改前基线」—— 犯过两次。 +- **顶栏只放两项**(左标题 + 右「随手记」),⛔ 不许再加。**左栏=一层八项**、短名**两字**、形态=64px 药丸浮栏。⚠️ **形态一改,自检选择器与变异注入点必须跟着改**,否则判据静默失效变恒绿(假绿已踩 4 次)。 +- ⚠️ 教训:改前那版「纯图标栏」是**照 `library.json` 的计数猜的** —— **计数不是几何,包里没有的事实就回源站量**。 +- **遗留未清**:`3d` B-15(500×844 一屏 −1 行)留档待裁定;「满宽表格与一屏 ≥6 行不可兼得」已登记未动。 + +## 七、本区会话机制 + +- 🔴 **域锁实体不在本工作区**:`handoff-guard.sh` 的 ROOT 落到**共享锁库 `D:/github/dsh_shenxian/dsh-server-docs/05-交接单/.locks/`**(`DSH_DOCS_ROOT` 覆盖**实测无效**);目录名被转义成 `_____…-`(非 ASCII 逐字变 `_`)。🔴 **释放要按 `OWNER` 里登记的 `ME` 原文**(例:登记的是 `改导航七项一层并P8并入复盘`,**不带** `[执行]-[产品规划]-` 前缀 ⇒ 用全名释放会报「名下无可释放的锁」而**锁其实还挂着**)⇒ 先 `cat <锁目录>/OWNER` 抄准名字。 +- **域锁规则**:域目录=**工作区下的第一层目录**;⛔ 别套公共父目录。抢 `handoff-guard.sh --claim-exec "<会话名>" --domains "<域目录>"`(包在 `skills/session-mechanism/scripts/lock/`);抢不到 ⇒ **停手报告**。释放 `--release-exec "<会话名>"`。🔴 **孤儿锁成因**:锁是**磁盘持久物**,会话无论怎么结束**都不释放**它(被宿主终止=`terminated`;**被用户手动关=`completed`**)⇒ 都成孤儿,而域冲突判定**只比会话名、不判死活**。✅ **2026-10-09 已有自动解除工具** `session-mechanism/scripts/lock/orphan-lock.py`(用户逐字授权「可以授权 检查会话自解除孤儿锁」= **R9 唯一例外**)—— 判据查宿主库 `sessions.status`(`working` 不动|`terminated`/`error`/`archived` 可解|`completed` 过时间闸 `--idle-min` 默认 30 分钟|查不到 sid ⇒ fail-closed);先 `--dry-run`。 +- ⚠️ **开关 `off` ≠ 没在跑**:`collabctl.py ensure` = 幂等收敛「on⇒补齐缺失/**off⇒全停**」,保活任务周期触发它 ⇒ off 下迟早被收敛停掉。开关语义="挡自动续命"。要真起/真停 ⇒ `collabctl.py on|off --ws …`。 +- 🔴 **机制登记已全改现名 `contentm_agent`**:`collabd.config.json` + `collabctl.py` 的 `WORKSPACES`/`KEEPALIVE_TASKS`(**源 + 3 个区副本共 4 份**)+ ai1net 的 `peer_workspaces`(改完**看板要重启**)。旧空壳 `content_marketing_agent.RETIRED-20261008` 保留(零删除)。⚠️ 改这文件记住源+3 副本。 +- 🔴 **文档合同**:执行棒产物落 `<目标目录>/`;**sid 取法**=查宿主库 `E:/ProgramData/.workbuddy/workbuddy.db` 的 `sessions` 表(按 `cwd` + `created_at desc`,本区会话 `is_background_automation=1`)。`--report --state done --artifact "<路径>"`:产物**读不到**⇒硬拒收;**落点不在目标目录**只给**软提醒**(不拒收)。 +- 🔴🔴 **目标目录名:新目标一律按机制口径**(2026-10-10 定,消掉原来的「两种口径」分岔)。规则(回源码 `goal_dir_name()` 坐实)=取 `short or title` → 去掉 `\/:*?"<>|` → **去空格** → **`[:20]`**,后缀 `sha1(title)[:6]`。例:`侧栏改回64px基准形态并刷新按钮改icon`(22 字)⇒ **尾部被截成 `改ic`** ⇒ 目录=`执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/`。⚠️ **存量那个全称口径的旧目录保持原样、⛔ 不改名**(改名会断台账 `artifact` 引用,如 `…upload项目,用于投放页与发布对象的判断-0ec0a7`)。⇒ 开新目标时**先按上式算准目录名** —— `goal.json.execution_doc` 是同一套口径算出来的,**必须与它一致**(切目标后若没跑过 `--ensure-goal-dir`,它会仍指着上一个目录 ⇒ 检查会话就会拿旧目标的状态文档判新目标,须手工对齐)。 +- 🔴 **浏览器保活=会话后台任务**(用户 2026-10-10 令「只允许这一种方式」):在要用浏览器的那个会话里,用**后台任务**跑 `bh_chrome_keepalive.py`,stdout 全重定向到文件(完整命令段见 `skills/browser-harness/SKILL.md` §1)。会话结束浏览器随之下线;手关窗(rc=0)⇒ 守卫停手、关了不再弹;崩溃(rc≠0)⇒ 自动拉回。⛔ 不建 Windows 计划任务(本机已撤 `bh-chrome-keepalive`)、⛔ 不复制副本到工作区。验证=`netstat` 见 LISTENING + `curl --noproxy '*' http://127.0.0.1:9223/json/version` 回 JSON。 diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index 0f2517a..ff4efd0 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -23,7 +23,13 @@ - 🔴 **功能归属判据(2026-10-09 用户令)**:**同一类事情放同一个页面**。配套两条:**资产入库不限页**(资产库页=统一管理的地方,⛔ 不是唯一入库口);**选题库容纳「对选题有帮助的任何信息」**(随手记仍落选题库,⛔ 不新增「待整理」状态)。 - 🔴 **「复盘」=发布之后看结果:看数据 + 看收入**(用户 2026-10-09 逐字「发布的目的就是为了看数据和看收入啊」)⇒「记录与对账」属复盘、是同一类事,留在复盘页,⛔ 不拆页、⛔ 不加导航项(GPT 主张拆出去的三条 G7/G10/G22 ⇒ **不采纳**)。 - 🔴 **「账号」是两个概念(2026-10-10 用户定义)**:**内容账号**=管内容属性(定位/风格/受众/红线),平台不属于它;**平台账号**=发布的渠道三方平台账号,登录态/授权归它 ⇒「**渠道**」=**平台账号**。建模:平台账号做成**内容账号下的子项清单**(1→N,每项带平台+登录态+授权状态)。✅ 已落地(V4):`2b` P6 画像五维+平台账号块;`2a` Account 改「内容账号」、F7 按平台账号展开、F13「一版一路」。 -- 🔴🔴 **找方案的唯一入口=`docs/pm/mcn-shortvideo-agent/索引-当前权威版.md`**(2026-10-11 主会话手建)。起因:用户问「很多新老方案都在文件夹中,后续根据方案细化产品界面如何找得到对应的方案」——实测**没有单一入口**:`2a-产品功能-新版.md` 有 **4 份**(`20a8ac` 61 683 B/`fa6e07` 61 683 B 同尺寸副本/`fc471a` 43 328 B/`071c5b` 40 917 B)、`2b` 也有 **4 份**;而 `docs/pm/mcn-shortvideo-agent/prd/` 里 10-10 22:24 归档的那两份**是旧版**(`2b` 只 52 256 B=V4,最新 V5 是 52 643 B)⇒ ⛔ 别把 `docs/` 当权威区。🔴 **断链根因**:机制定的是「执行期落 `执行会话/目标-*/`、主会话收口后统一搬进 `docs/pm/…/`」,但**归档只做过一次**(10-10 22:24),之后 `20a8ac`/`8a649c`/`0a758b`/`39646d` 四个目标的产物全没搬 ⇒ 归档区落后、执行区堆积;`research/` 与 `交付物/` 都是空的。⚠️ **维护时机**:每个目标收口时更新索引一次(⛔ 目前靠人记得,尚未写进机制)。 +- 🔴🔴 **方案的两态结构(2026-10-11 用户令,已写进技能)**:用户逐字「**应该有文件夹 专门归档过期文档, 当前文档 统一放在方案文件夹中**」,并令「**这个要记录到 产品规划规则中**」。 + · **方案文件夹**=`docs/pm/mcn-shortvideo-agent/`(`research/`①段+`prd/`②段+`ui/`③段+`专题/`跨段+`索引-当前权威版.md` 当入口)—— 里面**全是当前权威版**。 + · **归档文件夹**=同层 `归档-过期版/`,命名 `<原名>__<来源目标短哈希>.<扩展名>`。 + · **执行区** `执行会话/目标-*/` = 过程留痕(台账 `artifact` 指向那里),⛔ 不作查方案处、⛔ 不搬空。 + · ✅ **已落地**(20:2x):当前版 **16 份**归位、过期版 **28 份**收进归档、索引建好;规则写进 `E:/ProgramData/.workbuddy/skills/product-planning/SKILL.md` 新增的 `### 文档的两态:当前版与过期版`(在 `### 产物落哪` 之后)。✅ 闸门现跑 **2061|0|27** 全过。 + · ⚠️ 踩坑两处(我自己的):①往技能里插新段时拿原标题当锚点、new_string 里没把它带回去 ⇒ **吃掉了 `### DESIGN.md 为什么在项目目录、不在仓库根` 这个标题**,已修回(教训:用标题作锚插入内容时,锚点必须原样保留);②`research/` 只许 `1a`~`1e` 五个标准名 ⇒ 我放的 `1b-竞品分析-汇总对比体.md` 触发闸门 FAIL,改名 `1b-竞品分析.md` 后过(内容一字未动)。 +- 🔴🔴 **找方案的唯一入口=`docs/pm/mcn-shortvideo-agent/索引-当前权威版.md`**。起因:用户问「很多新老方案都在文件夹中,后续根据产品方案细化界面如何找得到对应的方案」——实测**没有单一入口**:`2a-产品功能` 在 **6 个**目标目录里各有一版、`2b` **7 个**、原型 5 个,光看文件名与字节数分不出谁新;而 `docs/pm/` 下早先那次归档还停在旧版(`2b` 只 52 256 B=V4,最新 V5 是 52 643 B)。🔴 **断链根因**:机制定的是「执行期落 `执行会话/目标-*/`、主会话收口后统一搬进 `docs/pm/…/`」,但**归档只做过一次**(10-10 22:24),之后 `20a8ac`/`8a649c`/`0a758b`/`39646d` 四个目标的产物一份都没搬。⚠️ **维护时机**:每个目标收口时更新索引(现已写进技能的四步动作里)。 - 🔴 **本区当前目标=无**(`39646d` 已于 2026-10-11 19:39 收口=已完成)。最近两个目标的收官(供追溯):`8a649c` 征询 GPT+补细节+重画图(17:22 完成,**国内口径**)|`39646d` 按全球口径重做平台矩阵与海外热点源(19:39 完成:三判据全过 —— 平台矩阵 9 229 B/海外热点源 13 986 B **实跑验通 9 条 + 没拿到 6 条如实登记**/全球版框图 35 223 B 与流程图 22 198 B)。⚠️ **下一目标开工前的待拍板**:要不要把 12 平台矩阵同步进 `2a`/`2b` 与原型(`39646d` 本轮只出方案与建议、⛔ 没动产品)。🔴 **教训(沿用)**:判据只写「有文档/有图」⇒ 执行棒交占位图 ⇒ **判据要落到「照着能做出来」的粒度**。⚠️ 遗留六条改结构项(平台热榜归属/热点事件是否独立成对象/进度 3 或 6 态/收藏热点/数据源管理落点/选题负责人与截止时间)登记在 `NEED-USER.md` 第 6 节。 - 🔴 **检查会话补齐状态文档=常规动作**:执行棒只交付产物、不写 `目标执行状态.md` ⇒ 检查会话要「现跑门禁 + 补写文档 + 回写 `--kpi`」三件一起做(`fa6e07`/`20a8ac`/`0a758b`/`39646d` 同型)。🔴 **派棒排期时间必须晚于创建时刻**。🔴 **派棒前必须自己 `automation_update list` 核一遍待执行排期**(2026-10-11 第 49 棒实测:注入通报写「没有别的待执行排期」,实际有两条 ACTIVE once ⇒ ⛔ 别信通报,信了就会重复派棒)。 - 📌 **已收口的旧目标**(细则在当日日志):`fc471a` 导航七项一层|`b49e02` 征询 GPT(🔴 D1 待裁定=GPT 主张拆「记录与对账」出复盘,与用户方向相反)|`071c5b` 四步|`fa6e07` 八条口径落②段+原型|`547748` 逆向 Easel(被换掉,其棒已收工)|`20a8ac` 侧栏 64px+刷新改 icon(10-10 完成)|`0a758b` 热点与选题逻辑+框图流程图(10-11 04:25 完成)|`8a649c` 征询 GPT+补细节+重画图(10-11 17:22 完成,⚠️ 属国内口径,已被 `39646d` 接续改造)。⚠️ `--kpi` 按**分号**切 ⇒ 依据里 ⛔ 不许写 `;`。 diff --git a/.workbuddy/memory/automations/228c5dd0-1bb9-440b-bea0-ed23631e38fb/memory.md b/.workbuddy/memory/automations/228c5dd0-1bb9-440b-bea0-ed23631e38fb/memory.md new file mode 100644 index 0000000..635e503 --- /dev/null +++ b/.workbuddy/memory/automations/228c5dd0-1bb9-440b-bea0-ed23631e38fb/memory.md @@ -0,0 +1,9 @@ +# 自动化记忆 · [检查]-[目标检查]-contentm_agent(第 49 棒及以后) + +## 2026-10-11 18:55 · 第 49 棒 + +- 目标「按全球口径重做平台矩阵与热点源含海外主流」(`39646d`) 判定=**没做完**(三条验收判据全未过,状态文档是空模板,台账零条目)。 +- **未派新棒**:发现已有执行棒 `8d7d02b3`(once,19:02,ACTIVE)在排队 ⇒ 再派会重复执行。 +- 动作:补写该目标目录下的 `目标执行状态.md`(判据表+结论+给下一棒的执行口径);用 `goalctl.py declare --kpi … --yes` 把三条判据值从非规范的「未过」改写为 `🔴 不过|…`,已回读确认;`lifecycle` 保持「进行中」。 +- 教训(下次直接照做):派棒前**必须自己跑 `automation_update list` 核待执行排期**,⛔ 别信注入通报里的「没有别的待执行排期」。 +- 现场两处与模板不符:工作区根无 `state.py`;`taskgraph.json` 不存在。 diff --git a/.workbuddy/memory/automations/2d15c315-cbe1-4c59-9b0f-0f3beef86a67/memory.md b/.workbuddy/memory/automations/2d15c315-cbe1-4c59-9b0f-0f3beef86a67/memory.md new file mode 100644 index 0000000..edd46a6 --- /dev/null +++ b/.workbuddy/memory/automations/2d15c315-cbe1-4c59-9b0f-0f3beef86a67/memory.md @@ -0,0 +1,31 @@ +# 自动化记忆 · `[执行]-[产品规划]-梳理热点与选题逻辑并出框图流程图`(id `2d15c315`) + +> 这是**执行棒**的自动化。每次触发=跑一轮「按 Easel 分析梳理热点与选题板块的逻辑关系 + 出产品框图与功能流程图」。 +> 本文件只记**跨轮有用的高层经验**,⛔ 不放全文产物、⛔ 不放交付正文。 + +## 轮次台账 + +| 轮 | 时间 | 结论 | 产物落点 | +|---|---|---|---| +| 1 | 2026-10-11 04:09 | ✅ 三样产出全部落盘,`--report done`,域锁已释放 | `执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/` | + +## 本轮要点(第 1 轮 · 04:09,会话 `3cadf11b`) + +- **产物三件**:`逻辑关系-热点与选题-2026-10-11.md`(12 KB,四问各一节)+ `产品框图-热点与选题-2026-10-11.html`(15 KB,architecture)+ `功能流程图-热点到选题-2026-10-11.html`(13 KB,flowchart)。另存两张渲染截图作证据。 +- **口径层关键结论**:现版**没有**叫「热点」的板块;P2 只有 4 块(对标监控概览/对标内容/评论区洞察/选题库)。本棒把「热点」定义为**信号来源(发现侧)**=三块 + 选题库里「数据异动」类型;「选题」=选题库那一块(F2)。⛔ 未改名、未新增板块。 +- **第二个结论**:Easel 的判断层=**七维打分**(判「做不做」);现版的判断层=**选题库的「类型」维度**(判「下一步去哪」)。别把 Easel 的打分体系当成现版缺口的补法。 +- **7 处断点**:只在文档里登记,⛔ 一条都没动手(改②段属扩范围,要用户点头)。 + +## 复跑时照做(下次触发直接抄) + +1. **先抢域锁**:`handoff-guard.sh --claim-exec "[执行]-[产品规划]-…" --domains "E:/ProgramData/AIProject/contentm_agent/执行会话"`(用 PortableGit 全路径 bash)。收工 `--release-exec`,名字照 `OWNER` 里 `ME` 的**原文**放(别带派活前缀),放完复核 `.locks/` 零残留。 +2. **只读**起点的两份输入:Easel 逆向报告(`…-547748/第1棒_*.md`)+ 现版 `2a`/`2b`(`…-fa6e07/`)。⛔ 一个字都不许改。 +3. **画图只用 `diagram-design`**:`product-planning/references/stage-requirements/assets/diagram-design/SKILL.md`。产品框图选 `architecture`,功能流程图选 `flowchart`。出图后**必跑** `scripts/self_check.py `;要视觉校验就起 browser-harness(先探 9223,未在跑才用**本会话后台任务**起),**一个标签页 `goto_url` 复用**,用完 `close_tab` + `list_tabs()` 归零,并把后台保活任务停掉。 +4. **上报**:`collabd.py --report --state done --artifact "<目标目录内的一份>"`。⚠️ 只吃**一个** `--artifact`(取首次出现)⇒ 给「检查会话能当入口」的那份(逻辑关系文档,文末列全三条路径)。 +5. **不写 `目标执行状态.md`** —— 按合同那是检查会话的活。 + +## 硬红线(每轮照守) + +- ⛔ 不改现版原型 `ui/mcn-workbench.html` 与 `2a`/`2b`;页 7/导航名序/板块 39/流转 20/对象 11 一律保持。 +- ⛔ 不改任何板块名、不新增板块(用户 2026-10-10 逐字:「没让改的 交互不允许乱改」)。 +- 落点一律 `<目标目录>/`,⛔ 不散到工作区其它目录。 diff --git a/.workbuddy/memory/automations/4850a599-62a8-4ec0-8bc1-48ad35e37ddb/memory.md b/.workbuddy/memory/automations/4850a599-62a8-4ec0-8bc1-48ad35e37ddb/memory.md new file mode 100644 index 0000000..015a6de --- /dev/null +++ b/.workbuddy/memory/automations/4850a599-62a8-4ec0-8bc1-48ad35e37ddb/memory.md @@ -0,0 +1,11 @@ +# 自动化记忆 · 目标检查会话(contentm_agent) + +> 本文件只记**高层执行历史**,⛔ 不放大段正文与交付内容。 + +## 2026-10-10 23:36 · 第 47 棒 · 目标「侧栏改回64px基准形态并刷新按钮改icon」 + +- **判定**:目标**已完成**,`lifecycle` 已置 `已完成`(常驻随之优雅退出)。 +- **依据**:三条验收判据**全 `过`**,四道门禁**本棒现跑**(`check_js` 通过/`check_skeleton` 七页 39 块一致/`grab_selftest` PASS 80-0/`mutate_test` 27-27),并做了源码直读交叉验证(`--nav-w:64px`、`.nav-item` 竖排、`.btn-icon`+`.shell-refresh` 挂标题行;`NAV`/`PAGES` 与 V4 逐字相同)。 +- **动作**:补写 `目标执行状态.md`(本目标第一份)→ `goalctl declare --kpi` 回写机读副本 → `collabd --set-life 已完成`。未派执行棒、未动产物、未动域锁。 +- **可复用口径(本棒最重要的一条)**:**执行棒不写状态文档是常态**(`fa6e07`/`20a8ac` 两次同型)⇒ 检查会话见「产物在盘 + 文档空骨架」**不是判不出来,是该由它补写**;补写前必须**现跑门禁**,⛔ 不抄执行棒记录里的数。 +- **遗留待用户裁定**:窄屏两档密度红;目标目录名两套口径(派活单 `…41c8bd` vs 机制 `…20a8ac`)。 diff --git a/.workbuddy/memory/automations/5587a951-40f0-47ef-827b-b3c3777de026/memory.md b/.workbuddy/memory/automations/5587a951-40f0-47ef-827b-b3c3777de026/memory.md new file mode 100644 index 0000000..2f6b05d --- /dev/null +++ b/.workbuddy/memory/automations/5587a951-40f0-47ef-827b-b3c3777de026/memory.md @@ -0,0 +1,14 @@ +# 自动化 5587a951 · 执行摘要 + +## 2026-10-10 22:46 · 第 1 棒(会话 `3f59c890`):逆向 Easel 热点雷达与选题链路 + +**结论**:三条判据全部判「过」,已上报 `done`。 + +- 产物落 `执行会话/目标-逆向Easel热点雷达与选题链路补齐现版-547748/`:`目标执行状态.md`(在骨架上补,未推倒)+ `第1棒_逆向Easel热点雷达与选题链路_2026-10-10.md` + `取证/` 14 份 Easel 源码原文。 +- 取证路线:本机 `raw.githubusercontent.com` 不通,走 `api.github.com/repos/ZJU-REAL/Easel/contents/` 取 base64 落盘再 grep(`web/app.py` 237 KB 也照此办)。 +- 对 `2a`/`2b`/原型/`DESIGN.md` **零改动**,落地方案只写进文档。 +- 域锁 `contentm_agent/执行会话` 已抢已放(按 OWNER 的 `ME` 原文),复核 `.locks/` 为空。 + +**下次可直接用**:Easel 热点链路源码坐标在当日日志 2026-10-10.md 里(app.py 4666-4775 与 4890-4963、App.tsx 540-547),不必再全仓翻。 + +**遗留**:落地方案里的四个数值(近 30 条中位数/样本 10 条/3.0/2.0)是建议值,等用户拍板。上报时出「不在目标目录内」软提醒 —— 目标在 22:49 又被换成「侧栏改回64px…」,属既有分岔。 diff --git a/.workbuddy/memory/automations/5b2ab4fa-23c7-4610-80b1-031025db3cc4/memory.md b/.workbuddy/memory/automations/5b2ab4fa-23c7-4610-80b1-031025db3cc4/memory.md new file mode 100644 index 0000000..cf8fc86 --- /dev/null +++ b/.workbuddy/memory/automations/5b2ab4fa-23c7-4610-80b1-031025db3cc4/memory.md @@ -0,0 +1,12 @@ +# 自动化记忆 · [检查]-[目标检查]-contentm_agent + +## 2026-10-11 19:35 · 第 50 棒(首次执行) + +- **任务**:核对目标「按全球口径重做平台矩阵与热点源含海外主流」(`goal_fp=39646d`)完成状态。 +- **判定**:**已完成**。上一轮(第 49 棒 18:55)判「全不过」是因为执行棒还没跑;本轮执行棒 `8d7d02b3` 已于 19:28 上报 `done`,产物落 `执行会话/目标-按全球口径重做平台矩阵与热点源含海外主流-39646d/`。 +- **处置**:补写 `目标执行状态.md`(判据表改 `过`×3、结论、对账)→ `goalctl.py declare --kpi` 回写 → 回读确认 → `collabd.py --set-life 已完成`(常驻随之优雅退出)。未派新棒。 +- **可复用经验**: + 1. 状态文档由执行棒之外的人写 ⇒ 检查棒必须「补文档 + 回写 kpi + 改生命周期」三件一起做,改完回读。 + 2. `--kpi` 按 `;`(中文 `;` 会被先替换)切 ⇒ 依据里不能出现任何一种分号。 + 3. 触发通报里「本项目没有别的待执行排期」**不可信**,派棒前必须自己 `automation_update list` 核一遍。 + 4. 本工作区 `state.py` 与 `taskgraph.json` 都不存在,模板第 1、3 项跑不出来,用 `collabd.py --domain-status` 与状态文档补齐。 diff --git a/.workbuddy/memory/automations/9177d426-841e-4a87-a260-9bce58ba2968/memory.md b/.workbuddy/memory/automations/9177d426-841e-4a87-a260-9bce58ba2968/memory.md new file mode 100644 index 0000000..6d1f00c --- /dev/null +++ b/.workbuddy/memory/automations/9177d426-841e-4a87-a260-9bce58ba2968/memory.md @@ -0,0 +1,6 @@ +# 自动化记忆 · 目标检查(第 47 棒起) + +## 2026-10-11 04:2x · 第 47 棒 +- 目标「根据Easel分析梳理热点和选题板块功能的逻辑关系,并画出产品框图和功能流程图」=**已完成**(lifecycle 已改,04:25:01)。 +- 处置套路:台账全 done + 产物实测三件齐 ⇒ 补写 `目标执行状态.md` → `goalctl.py declare --kpi` 回写并回读 → `collabd.py --set-life 已完成`。未派新棒。 +- 环境两处:`state.py` 与 `taskgraph.json` 在本工作区**不存在** ⇒ 检查时按「台账 + 判据」两路判即可,别当故障报。 diff --git a/.workbuddy/memory/automations/a5df1acb-7038-4827-822c-02bac0f200c9/memory.md b/.workbuddy/memory/automations/a5df1acb-7038-4827-822c-02bac0f200c9/memory.md new file mode 100644 index 0000000..5be95ae --- /dev/null +++ b/.workbuddy/memory/automations/a5df1acb-7038-4827-822c-02bac0f200c9/memory.md @@ -0,0 +1,9 @@ +# 自动化执行记忆 · 目标检查会话(contentm_agent) + +## 2026-10-11 17:2x · 第 48 棒 + +- 对象:目标 `8a649c`「征询GPT对选题板块细节的建议并重画框图流程图」。 +- 结论:**已完成**。台账 26 条全 `done`,无僵尸件;三条验收判据复核全过。 +- 动作(三件一起做,已回读确认):补写 `目标执行状态.md` → `goalctl.py declare --kpi … --yes` 回写 → `collabd.py --set-life 已完成`。 +- 现场事实(下次直接沿用):工作区根**没有 `state.py`**,改用 `goalctl.py` 默认输出顶替;`taskgraph.json` 不存在(本期未启用);`--set-life 已完成` 会让常驻优雅退出(机制预期,不是故障)。 +- 未派新棒。 diff --git a/docs/pm/mcn-shortvideo-agent/prd/2b-界面布局.md b/docs/pm/mcn-shortvideo-agent/prd/2b-界面布局.md index 3c22277..13ca1c8 100644 --- a/docs/pm/mcn-shortvideo-agent/prd/2b-界面布局.md +++ b/docs/pm/mcn-shortvideo-agent/prd/2b-界面布局.md @@ -97,12 +97,13 @@ ## 四、页面公共框架(Page Shell) -七页每页都有这一层,四样,从上到下: +七页每页都有这一层,三样,从上到下: -1. **页面标题区** —— 页名,加一句话说清这一页干什么。 +1. **页面标题区** —— 页名,加一句话说清这一页干什么。**本页的页面级动作不另起一行,挂在标题行右侧、右对齐**(例:刷新本页数据=一枚 icon 按钮,与页名同一行;按钮的完整含义走悬停提示与读屏标签)。 2. **数据摘要区**(可选)—— 本页若干个数的一行摘要。哪页有、摘要哪几个数,由本页需要决定;不是每页都必须有。 -3. **页面操作区** —— 本页的页面级操作。 -4. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 +3. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 + +> 🔴 2026-10-10 用户令:原来单列的「页面操作区」撤销 —— 页面级动作改挂标题行右侧。以后再有页面级动作,同此处理,⛔ 不再为它单开一行。 **三条硬规则**(这是本版新立的,堵的是现状 `A1`/`A3`): @@ -127,7 +128,7 @@ **核心对象**:`Account` 账号、`Performance` 表现数据 **不应该负责**:内容的深度编辑(那是 P4) -**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)+ 页面操作区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)。 🔴 上一版③段这两块就是「统计条」,本版归入框架,不算板块。它的「功能入口」那块**撤销**。 **业务板块清单(从上到下,5 块)** @@ -163,7 +164,7 @@ **核心对象**:`Benchmark` 对标号、`Topic` 选题 **不应该负责**:内容生产(那是 P4) -**页面公共框架**:页面标题区 + 页面操作区 + 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 🔴 上一版③段的功能入口那块**撤销**。本页**没有**数据摘要区 —— 因为这一页那四个数(对标监控概览)本身就是业务板块,属于 F1 的产出。 **业务板块清单(从上到下,4 块)** @@ -201,7 +202,7 @@ **核心对象**:`Asset` 资产条目 **不应该负责**:内容流程(拆解完就走,创作在 P4) -**页面公共框架**:页面标题区 + 数据摘要区(条目总数/已入库/待入库/分区数)+ 页面操作区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 数据摘要区(条目总数/已入库/待入库/分区数)。 🔴 上一版③段的功能入口那块**撤销**。 **业务板块清单(从上到下,4 块)** @@ -232,7 +233,7 @@ **核心对象**:`Content` 内容、`ContentVersion` 内容版本 **不应该负责**:真正执行发布(那是 P5) -**页面公共框架**:页面标题区 + **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 页面操作区 + 辅助入口区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 辅助入口区。 🔴 **「当前内容标识」从板块上移到这里。** 它服务整页,不是某个功能的对象。依据:GPT 的 P4 例(公共框架=当前内容上下文 + 页面级操作),采纳决策 G24。 🔴 上一版③段的功能入口那块**撤销**。 @@ -270,7 +271,7 @@ **核心对象**:`PublishTask` 发布任务、`PublishRecord` 发布记录 **不应该负责**:内容创作、版本生成(都在 P4) -**页面公共框架**:页面标题区 + 数据摘要区(目标渠道数/覆盖平台数/本批版本数/硬拦项数)+ 页面操作区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 数据摘要区(目标渠道数/覆盖平台数/本批版本数/硬拦项数)。 🔴 上一版③段的功能入口那块**撤销**。它上面原本挂着「创作台」与「记录与对账」两个跳转,这两个跳转纳入 §六 的流转契约(P5→P7 见第 14 条,回创作台走流程)。 **业务板块清单(从上到下,5 块)** @@ -305,7 +306,7 @@ **核心对象**:`Account` 账号(=内容账号;平台账号是它下面的子项,不另立对象) **不应该负责**:独立业务流程(它只提供上下文,不在生产链上) -**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)+ 页面操作区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)。 🔴 上一版③段的功能入口那块**撤销**。 **业务板块清单(从上到下,5 块)** @@ -341,7 +342,7 @@ **核心对象**:`Review` 复盘结论(原料是 `Performance` 表现数据);本页后半还有 `PublishRecord` 发布记录与 `Campaign/Order` 商单与收支 **不应该负责**:内容创作、版本生成(都在 P4) -**页面公共框架**:页面标题区 + 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数/记录总数/待结算数)+ 页面操作区。 +**页面公共框架**:页面标题区(右侧挂刷新 icon)+ 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数/记录总数/待结算数)。 🔴 上一版③段的功能入口那块**撤销**。 **业务板块清单(从上到下,10 块 · 平铺,⛔ 不划子区)** diff --git a/docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md b/docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md index db543d9..1e381fb 100644 --- a/docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md +++ b/docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md @@ -1,13 +1,22 @@ +> **落本目录说明(2026-10-08 由任务会话 `[执行]-[开源项目调研]-补齐MCN工作台①②段产出` 补记)** +> 本份是 1a 的**逐字复制件**,为了目标目录自包含(③段与后续会话不必跨目录找)。原件在 +> `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1a-需求文档-MCN短视频整合营销.md`(23 KB,2026-10-07 22:29); +> 同一内容另有一份在 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`——⚠️ 那一份是**旧版**(上游状态行停在「正在重写、9 条待复核」), +> 与本目录这份**内容不同**,引用时以本目录这份为准。 +> 本件**未改一字**(只加了这段说明)。性质是**汇总型需求**,不是 grill 澄清产出——下游引用时按这个性质读。 +> ⚠️ 本份里的 §三/§四/§五 是**汇总草案**,1c/1d/1e 三份按各自方法论独立成文,不照抄本份。 + +--- + # MCN 短视频内容整合营销智能体 · 需求文档(1a) > 项目 slug:`mcn-shortvideo-agent`|性质:**汇总型需求**(不是 grill 澄清出来的,来源见 §二) > 汇总时间:2026-10-07 | 状态行:**已确认 6 项 / 模型补全 9 项(其中 9 项未经用户确认)** -> 本文档由三类输入汇总:① 视频关键帧梳理(AI 内容工作台 2.0 / 3.0);② 6 份开源竞品分析(`content-workbench`);③ MCN 场景约束(多账号矩阵、短视频为主、整合营销)。 +> 本文档由三类输入汇总:① 视频关键帧梳理(AI 内容工作台 2.0 / 3.0);② 5 份开源竞品独立分析体加 1 份汇总对比体(`content-workbench`);③ MCN 场景约束(多账号矩阵、短视频为主、整合营销)。 > 凡模型自补的内容标【假设】,凡来自具体来源的标【源:…】。 -> 🔴 **上游状态(2026-10-07 21:35 补记,别漏读这一行)**:三类输入里,**第 ②类(6 份开源竞品分析)正在按 1b 方法论重写** —— 原版缺产品面(没写「给谁用 / 用户在什么处境下用它 / 界面上具体怎么操作」)。 -> ⇒ 本文档凡引 【源:附卷…】或【源:竞品主份…】的条目都是**待复核状态,⛔ 不得当终稿用**:F5、F7、F8、F9、F13、F10 的后半(Easel 归因回写),§三 三条差位,§四 后两条,§七 该抄八条与该避五条。 -> ⇒ 第 ①类(视频关键帧梳理)是独立证据,不受影响:F1、F2、F3、F4、F6、F14 整条,F10 的前半(四分离复盘)。 -> ⇒ 处理时机:5 份独立分析体重写完成后,拿新版逐条复核上面那份清单。 +> 🔴 **上游状态(2026-10-07 22:3x 更新,此前一行已作废)**:第 ②类输入已**重写完成并逐条复核完毕**。5 份独立体在 21:40 到 22:01 重写为产品视角七节结构;汇总对比体在 22:3x 按新边界重排。逐条复核结论:**9 条受影响条目里 2 条改、7 条不改**(清单见 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/复核清单-1a受影响条目.md`)。 +> 本版据此改了两处:**F5 的措辞**(旧写「敏感词与事实检测」,新版事实是「敏感信息硬拦 + 人设一致性软劝」)、**F7 的依据列**(Easel 发布中心直证的只有「多平台」,「多账号」另找依据)。另外 §六 治理段的「组织级暂停」按新版改成「组织级急停」,并把三件事「人来做」的形态分开写。 +> 其余受影响条目(F8、F9、F13、F10 后半、§三、§四 后两条、§七)复核后**依据全部坐实**,未改内容。 --- @@ -26,13 +35,14 @@ | 来源 | 性质 | 证据等级 | 落点 | |---|---|---|---| | AI 内容工作台 2.0 / 3.0(作者「小曾」) | 关键帧视觉梳理,Obsidian 插件形态 | 视频画面级(532 加 772 帧逐帧读) | `参考资料/AI内容工作台_功能点梳理.md`、`参考资料/Bilibili_BV1gsHn6AEk6/`、`参考资料/YouTube_jVHyoCYidLM/` | -| Easel | 开源竞品,源码级 | 文件树加源码加官方文档 | `content-workbench/证据附卷/1b-竞品分析-Easel.md` | -| OpenCreator | 开源竞品,源码级 | 同上(2182 blob) | `…/1b-竞品分析-OpenCreator.md` | +| Easel | 开源竞品 | 源码级 + 官方文档级 + **界面级**(唯一有官方截图的一家) | `content-workbench/证据附卷/1b-竞品分析-Easel.md` | +| OpenCreator | 开源竞品 | 源码级 + 官方文档级 | `…/1b-竞品分析-OpenCreator.md` | | 文到 AI | 闭源商业产品 | **文档级**(仓库无源码,全仓 5 blob) | `…/1b-竞品分析-文到AI.md` | -| Postiz 与 PostSider | 开源竞品,源码级 | 文件树加源码,含 fork 差异量化 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` | -| 跨项目汇总对比 | 主份,10 节骨架 | 综合上述四份 | `content-workbench/research/1b-竞品分析.md` | +| Postiz 与 PostSider | 开源竞品 | 源码级 + 官方文档级,含 fork 差异量化 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` | +| 5 项目清单与初步定位 | 独立体入口(竞品池总览) | 同各家 | `…/1b-竞品分析-5项目清单与初步定位.md` | +| 汇总对比体 | 主份,横向铺开加选型结论 | 综合上述五份 | `content-workbench/research/1b-竞品分析.md`(新版见目标目录 `72111e/1b-竞品分析-汇总对比体.md`) | -**证据强度要带着看**:文到 AI 那一列只有文档级证据,它的结论不能与另四个源码级项目同权;AI 内容工作台的结论来自视频画面,能确认「界面上有什么」,不能确认「它内部怎么实现」。 +**证据强度要带着看**:文到 AI 那一列只有文档级证据,它的结论不能与另四个源码级项目同权;AI 内容工作台的结论来自视频画面,能确认「界面上有什么」,不能确认「它内部怎么实现」;界面级证据本组只有 Easel 一家有,所以凡是「界面怎么动」的判断,五家里只有 Easel 是直证,其余都是源码或文档反推。 --- @@ -40,11 +50,11 @@ 一句话定位:**矩阵级的内容生产与经营中枢**,不是又一把写作工具。 -和已有的三类工具比,差位有三条(这三条也正好是竞品分析主份 §9.3 里写明的三个空白): +和已有的三类工具比,差位有三条(这三条正好是竞品分析 §9.3 里写明的三个空白): -1. **发现热点这一段普遍弱**。做内容的三家里两家只是「有」,做发布的两家几乎不管。【源:竞品主份 §8、§9.3①】 -2. **合规的自动发布是空白**。现在只有「浏览器自动化(有账号风险)」和「官方 OAuth 或只填充(要人工)」两条路,没有第三条。【源:竞品主份 §9.3②】 -3. **做内容与发内容仍是两套产品**,用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。【源:竞品主份 §9.3③】 +1. **发现热点这一段普遍弱**。做内容的三家里两家只是「有」,做发布的两家几乎不管。【源:竞品主份 §8 ①、§9.3①;独立体 Easel §三(热点雷达)、OpenCreator §三(「弱,没有热点发现」)、文到 AI §四(热点雷达,文档级)、Postiz 与 PostSider §四(弱)】 +2. **合规的自动发布是空白**。现在只有「浏览器自动化(有账号风险)」和「官方 OAuth 或只填充(要人工)」两条路,没有第三条。【源:竞品主份 §9.3②;独立体 Postiz 与 PostSider §七 可突破 1 原话「这条第三条路还没人走」;独立体 Easel §六 弱 2(自认自动化发布有风控风险)】 +3. **做内容与发内容仍是两套产品**,用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。【源:竞品主份 §9.3③;独立体 Easel §七 可突破 1(「做内容」和「发内容」是两拨人在做两半,中间是断层);独立体 Postiz 与 PostSider §七 可突破 3(「那段桥还是空的」)】 本产品选的是第 1 条与第 3 条,第 2 条按 §六 F5 的边界处理:只做分级闸门,不做自动代发。 @@ -54,9 +64,9 @@ **内容负责人**(主用户):定选题方向、审内容、看矩阵效果。他每天要回答的是「今天哪个账号发什么」。(【源:视频关键帧·对标与热点、发布与经营】) -**编导与文案**(高频用户):把一个选题做成成稿,走完创作流水线。他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;Easel 三层加载设计】) +**编导与文案**(高频用户):把一个选题做成成稿,走完创作流水线。他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;独立体 Easel §五 机制 1「三层加载」——元数据常驻、指令触发、资源按需,机制带来的用户结果正是「技能多到一百多个,聊天仍然跑得动」】) -**剪辑与投放**(协作用户):拿到成稿做视频,管发布与投留痕。他要的是「素材和文案对得上」。(【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据】) +**剪辑与投放**(协作用户):拿到成稿做视频,管发布与投留痕。他要的是「素材和文案对得上」。(【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据;五家竞品也都没有 MCN 投放留痕这一段的证据 —— 独立体 OpenCreator §三 只到「审批、结果、继续对话」】) --- @@ -66,31 +76,32 @@ **S1 找选题** 作为编导,当我面对一个矩阵下十个账号、每天要出三条内容时,我要知道「哪个赛道的哪条内容数据异常地好」,这样我不用逐个平台刷榜。 -【源:视频关键帧·对标博主监控四指标卡与「N 倍平时互动」异常值;竞品主份 §9.3①】 +【源:视频关键帧·对标博主监控四指标卡与「N 倍平时互动」异常值;竞品主份 §8 ①、§9.3①】 **S2 选题进资产库** 作为内容负责人,当我把一条爆款拆完,我要它的「角度、结构、开场白、标题」进资产库,这样下一次创作不是凭空写。 -【源:视频关键帧·拆解与沉淀·资产库;文到 AI 的「能力库」把稳定步骤沉淀为可复用方案】 +【源:视频关键帧·拆解与沉淀·资产库;独立体 文到 AI §四 能力 4「能力库」把稳定步骤沉淀为可复用方案】 **S3 走完创作流水线** 作为文案,当我要把一条选题做成短视频,我要在同一条流水线里走完「聊思路 → 写文案 → 起标题 → 做封面 → 发布检查 → 生成录制卡片」,不用记每个 skill 的名字。 -【源:视频关键帧·创作 Tab 子流程】 +【源:视频关键帧·创作 Tab 子流程;独立体 Easel §五 机制 1】 **S4 一份母版变多份** 作为运营,当一条母版内容做好,我要它变成矩阵下多个账号、多个平台各自的版本,这样我不用手工改十遍。 -【源:Easel 发布中心「一份母版内容到多平台版本」;文到 AI 卡片工坊「一稿多形态」】 +【源:独立体 Easel §四 能力 4「发布中心」——一处编辑、八端预览、超限当场标出(**直证的是「多平台」**);「多账号」靠 Easel 的多画像支持加本产品的矩阵需求,发布中心本身未见逐账号变体;独立体 文到 AI §四 能力 3「卡片工坊」一稿多形态】 **S5 发之前先过闸** -作为内容负责人,当我要把内容交出去发,我要在发之前看到「哪里有风险、具体改哪一句」,而且不可逆的动作必须由人确认。 -【源:Easel 发布前分级闸门(硬拦加软劝);PostSider read-first / draft-first(发布仍是人的动作)】 +作为内容负责人,当我要把内容交出去发,我要在发之前看清两件事:哪里会被硬拦、哪里只是提醒(发布中心会把超限的当场标出来),而且不可逆的动作必须由人确认。 +【源:独立体 Easel §四 能力 5(硬拦只认账号密钥与内部路径这类敏感信息,人设偏低只告警);独立体 Postiz 与 PostSider §五 机制 5(read-first / draft-first,发布仍是人的动作)】 +⚠️ 上一版这里写「看到具体改哪一句」,新版没有这个依据 —— Easel 的发布中心只标超限和格式问题,不逐句给改写建议。已按事实收紧。 **S6 效果回写** 作为负责人,当一条内容跑完,我要它的表现沉淀回账号画像,这样下一轮选题自己会变准。 -【源:Easel 归因回写账号画像;视频关键帧·数据复盘「四分离」分析】 +【源:独立体 Easel §三 核心步骤 6(读播放、互动、评论,把有效结构和偏好沉淀回画像记忆文件)+ §六 强 1(本组唯一把发现到归因串成闭环);视频关键帧·数据复盘「四分离」分析】 **S7 看整个矩阵** 作为机构负责人,当我的矩阵有二十个账号,我要一个界面回答「每个账号今天该发什么、发了什么、效果如何」。 -【假设:五个竞品都只做单账号或单团队视角,矩阵级视图是推断出来的差位,视频画面里也只看到单账号工作台】 +【假设:独立体五家都只做单账号或单团队视角(PostSider 到「多组织机构」为止,还是团队级),矩阵级视图是推断出来的差位;视频画面里也只看到单账号工作台】 **S8 商单与内容对账** 作为商务,当一条内容带了商单,我要内容、发布记录与收支能对上。 @@ -108,37 +119,41 @@ | F2 | 选题库与灵感速记(落本地知识库) | S1 S2 | P0 | 视频关键帧·首页随手记录加选题 | | F3 | 评论区洞察找选题 | S1 | P1 | 视频关键帧;不做仍能从 F1 得选题,只是少一路输入 | | F4 | 爆款拆解与资产库(角度、结构、开场白、标题四库) | S2 | P0 | 视频关键帧·关键差异化;这一条决定了「越用越准」 | -| F5 | 发布前分级闸门(敏感词与事实检测,硬拦加软劝) | S5 | P0 | Easel `content_guard` 加 `persona_gate`;不过闸就不许发 | +| F5 | 发布前分级闸门(**敏感信息硬拦 + 人设一致性软劝**) | S5 | P0 | 独立体 Easel §四 能力 5 两道闸:密钥、内部路径这类敏感信息 fail-closed 硬拦;人设一致性低于 80 分只告警。不过硬闸就不许发 | | F6 | 创作流水线(聊思路到录制卡片七个环节) | S3 | P0 | 视频关键帧·创作 Tab | -| F7 | 一份母版到多账号多平台版本 | S4 | P0 | Easel 发布中心;不做则 S4 办不成 | -| F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | OpenCreator 的「修订产生新版本」;文到 AI 也独立出现过同一条 | -| F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | Easel 画像六维加记忆作用域收敛到画像目录 | -| F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘;Easel 归因回写 | -| F11 | 矩阵级看板(每账号该发什么、发了什么、效果如何) | S7 | P1 | 【假设】竞品无此形态 | +| F7 | 一份母版到多账号多平台版本 | S4 | P0 | **Easel 发布中心直证「多平台」**(一处编辑、八端预览);**「多账号」的依据是 Easel 多画像支持 + 本产品的矩阵需求**,发布中心未见逐账号变体。不做则 S4 办不成 | +| F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | 独立体 OpenCreator §五 机制 4(修订产生新版本、带 `sourceArtifactIds` 溯源与 `stale` 标记);独立体 文到 AI §五 机制 4(版本可对比、可采用、可继续改)。本组两次独立观测到同一条 | +| F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | 独立体 Easel §四 能力 2(六维画像)+ §五 机制 3(画像内联进 prompt、不写全局文件,为了并发不覆盖) | +| F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘(前半);独立体 Easel §三 核心步骤 6 加 §六 强 1(后半,**本组唯一闭环**) | +| F11 | 矩阵级看板(每账号该发什么、发了什么、效果如何) | S7 | P1 | 【假设】五家竞品无此形态 | | F12 | 商单与收支记录、内容对账 | S8 | P2 | 【假设】视频关键帧有「收支」Tab,口径未证实 | -| F13 | 发布留痕与人工确认记录 | S5 | P1 | PostSider 的审计与审批流思路 | +| F13 | 发布留痕与人工确认记录 | S5 | P1 | 独立体 Postiz 与 PostSider §四 能力 3(审批流、审计轨迹)+ §三 PostSider 核心步骤 3(草稿进审批队列,人批了才排上) | | F14 | 录制卡片与画板(Excalidraw 形态) | S3 | P2 | 视频关键帧·画板模块;不影响场景办成,只是更好用 | -**六项治理要在每条功能条目里各自交代**(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认)。这几条在本版只列要求,具体落在②段 P0 条目上。其中「不可逆操作二次确认」与 F5、F13 直接相关:发布、删帖、组织级暂停三类动作必须人来做。【源:PostSider 把 `destructiveHint` 只留给删帖与组织级暂停】 +**六项治理要在每条功能条目里各自交代**(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认)。这几条在本版只列要求,具体落在②段 P0 条目上。「不可逆操作二次确认」与 F5、F13 直接相关,但**三件事「人来做」的形态不一样,别压成一句话**: + +- **发布**:发布这个动作本身留在人手里(read-first / draft-first)。【源:独立体 Postiz 与 PostSider §五 机制 5】 +- **删帖**:带破坏性注解,属需要二次确认的一类。【源:独立体 Postiz 与 PostSider §七 该借鉴 3,`destructiveHint: true` 只留给删帖和急停两件】 +- **组织级急停**:触发与恢复都只有人能做。【源:独立体 Postiz 与 PostSider §三 PostSider「系统帮了什么」】 --- ## 七、能力底座(从竞品抄什么、避什么) -**该抄的八条**(都能追溯到具体项目): +**该抄的八条**(都能追溯到具体项目,节号指新版独立体): -1. **技能即能力**:技能不是名词,配可运行脚本,成品落盘。【源:Easel 114 技能,含 146 个 `.py`】 -2. **三层加载加 `SKILL.md` 不超过 200 行**:Metadata 常驻、Instructions 触发、Resources 按需。这是让能力持续变多而不炸 prompt 的唯一解。【源:Easel `SKILL-SPEC.md`】 -3. **契约层独立成包**:三端同源,版本号明文可读。【源:OpenCreator `packages/protocol` 与 `protocolVersion`】 -4. **状态机加版本号加幂等键三件套**,并为「远端到底收没收」专设 `unknown_remote_acceptance` 与 `abandoned_unknown` 两个状态。【源:OpenCreator】 -5. **read-first / draft-first**:Agent 可以准备、排期、送审,发布仍是人的动作。这条把「自动化」与「不可逆」分开。【源:PostSider】 -6. **发布前分级闸门**:不可逆的硬拦,可商量的软劝,不做一刀切。【源:Easel】 -7. **本地与免密钥 provider 作一等公民**:用户不必先配 Key 才能开始用。【源:OpenCreator、文到 AI、Easel 共同】 -8. **独立更新清单**:`channel`、逐包 `sha256`、`minimumSupportedVersion`、`allowSkip`、`remindAfterHours`。【源:文到 AI `stable.json`】 +1. **技能即能力**:技能不是名词,配可运行脚本,成品落盘。【源:独立体 Easel §四 能力 1(114 技能,技能树挂 146 个 `.py`)】 +2. **三层加载加 `SKILL.md` 不超过 200 行**:元数据常驻、指令触发、资源按需。这是让能力持续变多而不炸 prompt 的唯一解。【源:独立体 Easel §五 机制 1】 +3. **契约层独立成包**:三端同源,版本号明文可读。【源:独立体 OpenCreator §五 机制 3、§七 该借鉴 2(`packages/protocol` 与 `protocolVersion`)】 +4. **状态机加版本号加幂等键三件套**,并为「远端到底收没收」专设 `unknown_remote_acceptance` 与 `abandoned_unknown` 两个状态。【源:独立体 OpenCreator §五 机制 3】 +5. **read-first / draft-first**:Agent 可以准备、排期、送审,发布仍是人的动作。这条把「自动化」与「不可逆」分开。【源:独立体 Postiz 与 PostSider §五 机制 5】 +6. **发布前分级闸门**:不可逆的硬拦,可商量的软劝,不做一刀切。【源:独立体 Easel §四 能力 5】 +7. **本地与免密钥 provider 作一等公民**:用户不必先配 Key 才能开始用。【源:独立体 OpenCreator §五 机制 6(自注「本组三个做内容的项目都出现」)、文到 AI §五 机制 2、Easel §四】 +8. **独立更新清单**:`channel`、逐包 `sha256`、`minimumSupportedVersion`、`allowSkip`、`remindAfterHours`。【源:独立体 文到 AI §五 机制 3(`stable.json` 逐字段)】 **该避的五条**: -避浏览器自动化发平台(账号风控是真实风险,Easel 自己在 README 里承认)。避 README 与发行状态脱钩(文到 AI 的文档停在「尚未发布」,实际已发 10 个版本)。避上游强耦合的薄壳路线(OpenCreator 把 Agent loop 全交给 Codex,一次破坏性变更就可能整体不可用)。避命名双轨(产品改名了,内嵌件还用旧名)。避素材授权未核实就用(一律先设 `draft`)。 +避浏览器自动化发平台(账号风控是真实风险,Easel 自己在 README 里承认)【源:独立体 Easel §六 弱 2】。避 README 与发行状态脱钩(文到 AI 的文档停在「尚未发布」,实际已发 10 个版本)【源:独立体 文到 AI §六 弱 3】。避上游强耦合的薄壳路线(OpenCreator 把 Agent loop 全交给 Codex,一次破坏性变更就可能整体不可用)【源:独立体 OpenCreator §六 弱 1】。避命名双轨(产品改名了,内嵌件还用旧名)【源:独立体 OpenCreator §六 弱 4】。避素材授权未核实就用(一律先设 `draft`)【源:独立体 OpenCreator §五 机制 8、§七 该避开 4】。 --- @@ -158,10 +173,10 @@ | A2 | 平台数据靠官方接口或授权方式拿,不靠抓取 | 假设 | F1、F10;若拿不到,S1 与 S6 要降级 | | A3 | 收支记录的口径是「内容级」而不是「月级」 | 假设 | F12 | | A4 | 团队 5 到 20 人,不超过三层审批 | 假设 | F5、F13 | -| R1 | 上游模型或 Agent 引擎的破坏性变更 | 风险 | 全链路;对策是契约层加可用版本回退 | -| R2 | 平台发布规则变动导致合规路线失效 | 风险 | F5、F7;对策是分级闸门加人工确认 | -| R3 | 资产库沉淀质量差,变成垃圾场 | 风险 | F4;对策是入库前设门禁,参照 OpenCreator 模板治理的 `draft` 做法 | -| R4 | 多账号并发写同一份状态互相覆盖 | 风险 | F9;对策是记忆作用域收敛到画像目录,不写全局 | +| R1 | 上游模型或 Agent 引擎的破坏性变更 | 风险 | 全链路;对策是契约层加可用版本回退【源:独立体 OpenCreator §六 弱 1、§九 借鉴 6 迁移演练】 | +| R2 | 平台发布规则变动导致合规路线失效 | 风险 | F5、F7;对策是分级闸门加人工确认【源:独立体 Easel §六 弱 2、Postiz 与 PostSider §七 该避开 1】 | +| R3 | 资产库沉淀质量差,变成垃圾场 | 风险 | F4;对策是入库前设门禁,参照 OpenCreator 模板治理的 `draft` 做法【源:独立体 OpenCreator §五 机制 8】 | +| R4 | 多账号并发写同一份状态互相覆盖 | 风险 | F9;对策是记忆作用域收敛到画像目录,不写全局【源:独立体 Easel §五 机制 3】 | --- @@ -185,17 +200,50 @@ | 功能或结论 | 主要来源 | |---|---| -| F1 F2 F3 F4 F6 F10 F14 | `参考资料/AI内容工作台_功能点梳理.md`(视频关键帧梳理) | -| F5 | `…/1b-竞品分析-Easel.md` §8.2 发布安全闸门 | -| F7 F8 | Easel 发布中心;`…/1b-竞品分析-OpenCreator.md` §4.2 与 §十一 | -| F9 | `…/1b-竞品分析-Easel.md` §九 账号画像 | -| F13 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` §4.1 与 §七 | -| §三 三条差位 | `content-workbench/research/1b-竞品分析.md` §8、§9.3 | -| §七 该抄与该避 | 四份单项目附卷的可借鉴点与风险段 | +| F1 F2 F3 F4 F6 F14 | `参考资料/AI内容工作台_功能点梳理.md`(视频关键帧梳理) | +| F5 | 独立体 Easel §四 能力 5(发布安全闸门两道) | +| F7 | 独立体 Easel §四 能力 4(发布中心) | +| F8 | 独立体 OpenCreator §五 机制 4;独立体 文到 AI §五 机制 4 | +| F9 | 独立体 Easel §四 能力 2、§五 机制 3 | +| F10 | 视频关键帧(前半);独立体 Easel §三 核心步骤 6、§六 强 1(后半) | +| F13 | 独立体 Postiz 与 PostSider §四 能力 3、§三 PostSider 核心步骤 3 | +| §三 三条差位 | 汇总对比体 §8、§9.3①②③;独立体 Easel §七 可突破 1、Postiz 与 PostSider §七 可突破 1 与 3 | +| §七 该抄与该避 | 独立体 Easel §四 §五 §六、OpenCreator §四 §五 §六、Postiz 与 PostSider §五 §七、文到 AI §五 §六 | +| §九 R1—R4 对策 | 独立体 OpenCreator §五 机制 8、独立体 Easel §五 机制 3 | | S7 S8 A1—A4 | 【假设】,无外部来源 | -🔴 **这张表里凡指向 `1b` 系列的行,上游都在重写中**(原因见文首「上游状态」行):F5 / F7 / F8 / F9 / F13、F10 的后半(Easel 归因回写)、§三 三条差位、§七 该抄该避 —— 复核完才能算数;指向视频关键帧梳理的行不受影响(F1 / F2 / F3 / F4 / F6 / F14,以及 F10 的前半四分离复盘)。 +🔴 **这张表里所有指向竞品分析的节号都已在 2026-10-07 22:3x 按新版独立体逐个核过**(新版独立体统一为七节结构,故不再出现旧的 `§8.2` / `§九` / `§十一` / `§十三` 这类编号)。指向视频关键帧梳理的行不受影响。 --- -*本文档是「MCN 短视频内容整合营销智能体」的①段 1a 需求文档(汇总型)。上游取证见 `content-workbench` 的 1b 系列与 `参考资料/` 下的视频抽帧材料。* +## 这一版跟上一版的实质差别 + +上一版(2026-10-07 21:36 写)发布时,第 ②类输入(6 份开源竞品分析)**正在按 1b 方法论重写**,它把 9 条受影响条目挂成「待复核」,并声明「⛔ 不得当终稿用」。这一版就是那份复核的结果落地。 + +实质差别逐条列: + +1. **文首状态行整条换掉。** 上一版写「上游正在重写、9 条待复核、不得当终稿」;这一版写「重写完成并逐条复核完毕、9 条里 2 条改 7 条不改」,并把复核清单的路径写上。这是这一版存在的理由。 + +2. **F5 的措辞改了(这是内容层真改,不是换词)。** 上一版写「敏感词与事实检测,硬拦加软劝」。新版独立体里 Easel 的硬闸管的是 API key、内部路径这类**敏感信息**,软闸管的是**人设一致性**,全程没有「敏感词」也没有「事实检测」。照旧写会把②段带去做一个竞品池里没人做过的「事实核查器」。已改成「敏感信息硬拦 + 人设一致性软劝」。 + +3. **F7 的依据列改了。** 上一版直接写「Easel 发布中心;不做则 S4 办不成」,读起来像「Easel 的发布中心已经能做矩阵级变体」。新版独立体证明:发布中心直证的只有**多平台**(一处编辑、八端预览);**多账号**靠的是 Easel 的多画像支持,加上本产品的矩阵需求。依据列已按这个界线拆开写。 + +4. **S5 收紧。** 上一版写「我要在发之前看到哪里有风险、具体改哪一句」。「具体改哪一句」在新版独立体里找不到依据 —— Easel 的发布中心只标超限字数和格式,不逐句给改写建议。已改成「哪里会被硬拦、哪里只是提醒」,并加了警示行说明为什么收。 + +5. **§六 治理段的「人来做」拆开了。** 上一版把发布、删帖、组织级暂停三件事压成一句「必须人来做」。新版说的是:发布是人的动作、删帖带破坏性注解需要二次确认、组织级**急停**的触发与恢复只有人能做 —— 三件形态不一样。已拆成三条,并把「暂停」更正为「急停」。 + +6. **§七 的十三条依据全部换新版节号。** 上一版笼统写「四份单项目附卷的可借鉴点与风险段」(那些附卷当时还是旧结构);这一版逐条挂新版独立体的节号,并且每条都核过。 + +7. **§二 来源表重排。** 上一版把 6 份开源分析压成 4 行;这一版按「5 份独立体 + 1 份汇总对比体」分列,并把证据等级改成三级(加「界面级」,只 Easel 有),在表下补了一句「界面级的判断五家里只有 Easel 是直证」。 + +8. **§三 三条差位补独立体出处。** 内容判定没变(三条都坐实),但每条后面补上了独立体里的旁证,不再只靠汇总对比体一句话。 + +9. **§四、§九 的引用更新。** 编导与文案那条补了 Easel 三层加载的机制细节;R1 到 R4 的对策逐条挂上独立体节号;剪辑与投放那条仍是【假设】,因为五家竞品都没有 MCN 投放留痕的证据。 + +**没变的部分**:§一 一句话与不做什么、§五 的 S1 到 S8 骨架、§六 的功能编号与优先级、§八 明确不做、§十 的 9 条待复核。这些不受上游重写影响。 + +--- + +*本文档是「MCN 短视频内容整合营销智能体」的①段 1a 需求文档(汇总型)。上游取证见 `content-workbench` 的 1b 系列与 `参考资料/` 下的视频抽帧材料。本版落在目标目录 `72111e` 内,⛔ 未覆盖工作区根 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`。* + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/research/1b-竞品分析.md b/docs/pm/mcn-shortvideo-agent/research/1b-竞品分析.md new file mode 100644 index 0000000..f790b89 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/research/1b-竞品分析.md @@ -0,0 +1,384 @@ +# 1b 竞品分析 · 汇总对比体(内容工作台) + +> 项目 slug:`content-workbench` | 原始目标:调研 5 个开源内容工作台项目并生成分析文档 +> 本份是 1b 的**汇总对比体**,只做一件事:把 5 个竞品**放在一起比** —— 共识是什么、差异在哪、哪里没人做好、我们要先解决什么。主线是五问:用途 → 场景 → 功能 → 作用 → 优势。 +> 单个竞品的完整形态 / 给谁用 / 干什么用、用户把事办成的过程、它自己的能力与机制,**在各家独立分析体里**(`证据附卷/` 5 份,写法判据见方法论 §11)。本份不重抄那部分,只保留横向对比需要的基线。 +> 竞品池是 5 个开源项目,实际是 **4 条独立产品线 + 1 组同源双形态**(见 §2)。 +> 证据分三级:**源码级**(结论来自仓库文件树、源码或官方文件)· **官方文档级**(只有官方自述与仓库元数据)· **界面级**(有官方界面截图)。本次**界面级只有 Easel 一家**(4 张官方工作台截图);**文档级只有文到 AI 一家**(无业务源码)。 +> 原始证据在 `取证/`:`api/` · `api/fork/` · `easel/` · `opencreator/` · `wendao/`。取证时间见 §附 E。 +> **改版说明(第二版,2026-10-07 22:3x)**:第一版 21:41 写就,早于 4 份新版独立体,边界要重核(详见文末「这一版跟上一版的实质差别」)。本版按方法论 §0.4 收紧为纯横向:逐家的能力详述、机制详述交回独立体,只留横向铺开与选型结论。 + +--- + +## 0. 怎么读这份 + +五问落在哪:用途看 §3,场景看 §4,功能和作用都在 §5,优势看 §7。§8 的矩阵和 §10 的结论负责收口。 + +**想知道「某一家具体长什么样、用户怎么用它」** —— 那不在本份,去读对应那家的独立分析体。本份只回答「摆在一起看,它们差在哪」。 + +文到 AI 的证据只到官方文档级,在本组不进源码级,凡引用处都已标注。它和另外 4 家的结论不同权。 + +许可、风险、取证冲突、缺口这四类工程与合规内容不进正文,统一放在 §附 A 到 §附 E。 + +--- + +## 1. 这次要回答什么 + +做一款**自有内容工作台**时,这 5 个项目各自把「用户的内容工作」做成了什么形态?哪些做法值得借鉴、哪些要避开、哪些还没被解决好? + +竞品池见 §2。**不展开**的部分:用户量、下载量、营收、定价实测;行级代码 diff;各项目的真实运行验证(缺口见 §附 D)。 + +五问各自落在哪一节: + +| 五问 | 关注点 | 落点 | +|---|---|---| +| 用途:是什么、给谁用、干什么用 | What / Who | §3 | +| 场景:用户在什么处境下用它 | When / Why | §4 | +| 功能:有哪些核心能力 | What | §5 | +| 作用:每项能力解决什么问题 | What for | §5 | +| 优势:相对谁、在哪些场景更强更弱 | vs Whom | §7 | + +--- + +## 2. 选了哪些竞品 + +分三层: + +1. **直接竞品(做内容)**:`ZJU-REAL/Easel`、`krillinai/OpenCreator`、`wendaoai/wendao-content-workbench`(文到 AI)。 +2. **间接与替代方案(发内容)**:`gitroomhq/postiz-app`、`lumizone/postsider`。 +3. **点名参考实装**:本次**没有**。原始目标只给了 5 个链接,所以全部按前两层收录。 + +为什么是这 5 个:用户要「把内容做出来」时,会在 Easel、OpenCreator、文到 AI 之间比,比的是**全链路 / 媒体工厂 / 单平台桌面**三条不同做法。用户要「把内容发出去、排期、接 Agent」时,两条路是**成熟生态**与 **Agent 桥**。 + +PostSider 是 `postiz-app` 的 fork —— 它的 `ATTRIBUTION.md` 里逐字写了这一点,两者同为 AGPL-3.0。所以这两个按**一条产品线、两个形态**处理;矩阵里分两列只为写清差异,同源关系回到 §附 C 第 3 条。 + +读的时候要带上一个前提:**这 5 个不在同一赛道。** 它们分属内容生产链的上游(做)和下游(发),这个分界后面每一节都要用到。 + +--- + +## 3. 用途基线(一行一家) + +这一节只给「摆在一起比」需要的最小基线。各家完整的用途四行(形态 / 给谁用 / 干什么用 / 证据等级)在独立体 §2,本份不重抄。 + +| 竞品 | 形态 | 给谁用 | 用它干什么 | +|---|---|---|---| +| **Easel** | 开源社媒内容工作台,本地自托管(Web `:7860` + CLI) | 要一条龙做社媒内容的个人或小团队 | 一个 Agent 贯穿「发现热点 → 策划选题 → 创作图文音视频 → 多平台发布 → 归因回写画像」 | +| **OpenCreator** | 创作者 AI 工作台,Web 单前端 + Electron 壳,Codex 驱动 | 要批量做媒体的创作者 | 把 Agent 对话与可视化创作工具装在同一个本地 Runtime 上,批量生产视频、图像、语音、口播 | +| **文到 AI** | 本地优先的**公众号**写作 / 排版 / 配图**桌面工具**(Wails,三平台) | 只做公众号一条线、在意数据留本机的人 | 从选题、写稿、排版、配图到发布准备,全在桌面端本地完成 | +| **Postiz** | 社媒**排期**工具(Cloud SaaS + 开源自托管双形态) | 要稳定排期与协作的团队 | 30+ 平台排期、分析、团队协作,并接受 n8n / Make / Zapier 式自动化接入 | +| **PostSider** | Postiz 的 fork,改造成「Agent 桥」(Docker Compose,入口 `:4007`) | 要把发帖能力接给 AI Agent 的开发者 | 30+ 平台排期,加公开 REST API、Node SDK、MCP server(19 个工具) | + +「内容工作台」这个词在本组里指两种东西:**做内容**的(Easel、OpenCreator、文到 AI)和**发内容**的(Postiz、PostSider)。 + +--- + +## 4. 使用场景横向对比 + +横切方式:按**内容生产链上的五个用户处境**铺开,看用户在这个处境下要办成什么、各竞品怎么让他办成。不按竞品逐个写。 + +| 用户处境 | Easel | 文到 AI(文档级) | OpenCreator | Postiz | PostSider | +|---|---|---|---|---|---| +| **① 我该做什么**(发现热点、定选题) | 有,热点雷达聚合 6 到 8 个平台 | 有,热点雷达加营销日历 | 弱,有视频下载,没有热点发现 | 弱,RSS 自动发 | 弱,无 | +| **② 选题怎么排成计划** | 有,策划技能成组 | 有,选题库、系列规划、能力库编排 | 弱,脚本和模板 | 无 | 无 | +| **③ 把东西做出来** | 有,技能库带可运行脚本 | 有,写作、排版、配图、卡片工坊 | 有,十项创作工具加 108 条模板(视频翻译覆盖 14 源语言到 101 目标语言) | 弱,AI Copilot 与图、视频、切片,要自带 Key | 无,主动移除了 AI 内容生成 | +| **④ 发出去** | 有,7 平台,靠浏览器自动化喂入 | 弱,发布助手插件只填充不代发 | 无,不做发布 | 有,30+ 平台,走官方 OAuth | 有,30+ 平台 | +| **⑤ 发完怎么复盘** | 有,归因结果回写账号画像 | 弱,公众号数据月度复盘 | 无 | 有,按渠道分析 | 有,分析和客户报告 | + +⚠️ 文到 AI 那一列的证据只到官方文档级。它的「场景」在独立体 §3 里已写明**六行动作链里三行整行取不到**,本表的格子只是官方自述能支撑到的粒度,别当界面级事实读。 + +各自处境下「为什么这么做」(When / Why 这一层): + +① 到 ② 是**做内容三家的主场**。它们把「该做什么」当成产品入口。两家排期产品不做选题,因为用户是带着已成稿的内容来的。 + +③ 是**分歧最大的一段**。OpenCreator 把这段做成媒体工厂,批量、多语言、模板化;Easel 做成技能库,技能就是可运行脚本,产物落盘;PostSider 反过来主动移除了 AI 生成,它只服务已经有稿子的人。 + +④ 是**产品边界的分水岭**。Easel 用浏览器自动化把「发」也纳入闭环,自己在 README 里承认有平台风控风险;Postiz 不自动化也不抓取;文到 AI 只填充不代发;OpenCreator 干脆不做。这背后是两种用户价值:把 ④ 做进产品省下一次搬运,代价是把不可逆的动作交给了自动化;不做 ④ 少一段风险,但用户要手动搬一次。 + +⑤ 只有 **Easel 做成了闭环**。归因结果回写账号画像,下一轮的 ①② 由此收敛。这是本组唯一一处「用得越久越懂你」的设计。 + +--- + +## 5. 功能横向对比 + +维度按内容链路层建,可增不可缺:能力面、Agent 可调用面、内容治理。**每项能力「解决什么问题 / 起什么作用」的完整写法在独立体 §4**,本节只做横向。 + +### 5.1 能力面(按链路层) + +| 维度 | Easel | 文到 AI | OpenCreator | Postiz | PostSider | +|---|---|---|---|---|---| +| 发现 / 热点 | 强,多平台热榜聚合 | 中,热点雷达 | 弱,仅视频下载 | 弱,RSS | 弱,无 | +| 策划 / 选题 | 强,技能成组 | 中,选题库加系列规划 | 弱,脚本与模板 | 无 | 无 | +| 创作 | 强,技能库带脚本 | 中,写作 / 排版 / 配图 / 卡片工坊 | 最强,十项工具加 108 模板 | 中,自带 Key | 无,主动移除 | +| 发布 | 中,7 平台自动化 | 弱,只填充不代发 | 无 | 最强,30+ OAuth | 最强,30+ | +| 归因 | 强,回写画像 | 中,月度复盘 | 无 | 中,分析 | 中,分析 / 客户报告 | + +横向看下来,能拉开差距的只有两段:**创作**(OpenCreator 最重)和**发布**(Postiz 与 PostSider 最全)。其余各段都有至少一家做得出,差异在深度不在有无。 + +### 5.2 Agent 可调用面 + +| 竞品 | 形态 | 解决什么问题 | +|---|---|---| +| Easel | OpenClaw Agent + MCP | 让技能能被 Agent 调起 | +| OpenCreator | MCP runtime 透传 Codex | 不自造 Agent 循环,省一半工期 | +| Postiz | MCP 嵌在后端 + CLI + 15 个 agent 连接器 | 让现成 Agent 接进来 | +| PostSider | 独立 MCP 包,19 工具(13 读 6 写) | 把「可调用面」做成独立产品件 | +| 文到 AI | 无 | — | + +这一行的横向结论:**Agent 可调用面已经不是差异点。** 5 家里 4 家都有,两家排期产品还把 MCP / API / SDK 放进了每一个付费档,没当成加价项。它已经从卖点变成基础能力。 + +### 5.3 内容治理(发布前) + +横向铺开四家的姿态: + +- **Easel**:两道闸。`content_guard.py` 管敏感信息(API key、内部路径),fail-closed,退出码 7;`persona_gate.py` 管人设偏离,低于 80 分只告警。一道硬,一道软。 +- **PostSider**:read-first / draft-first。Agent 可以准备、排期、送审,**发布仍然是人的动作**;急停恢复也只有人能做。 +- **文到 AI**:只填充不代发,把最后一步留给人。 +- **Postiz**:托管侧走平台官方 OAuth,不抓取、不自动化。 +- **OpenCreator**:不做发布,所以这一段没有对应设计。 + +横向看下来分两派:**「硬拦 + 软劝」「只填充不代发」是产品内的闸门**;「不自动化平台」是产品外的合规姿态。两条不冲突,但见 §9.2 第 1 条 —— 同一条产品线里不能两头都抄。 + +--- + +## 6. 机制横向对比 + +§5 比的是「有什么」,本节比「同一个问题各家怎么解」。**各家的完整机制清单在独立体 §5**,本节只挑横向有分歧的几组。 + +**1. 记忆与上下文的作用域。** + +- Easel:按**账号画像**分(六维画像,画像目录即记忆作用域,不写全局文件)。 +- OpenCreator:按**通用三级**分(global / project / thread);文档说明它不会自动保存,只给「存为长期记忆」的建议。 +- 文到 AI:单机本地 SQLite,没有账号维度。 +- Postiz / PostSider:没有内容记忆这一层。 + +⇒ 这一组的分歧是「作用域的粒度」。做内容的三家里,只有 Easel 把粒度收到了**账号**;OpenCreator 收到**项目**;文到 AI 干脆不做多账号。 + +**2. 改稿与版本。** + +- OpenCreator:修订产生新版本、不覆盖,带 `sourceArtifactIds` 溯源和 `stale` 标记。 +- 文到 AI:版本可对比、可采用、可继续改。 +- Easel:产物落 `outputs/<主题>/`,系统状态目录带 `_` 前缀。 + +⇒ **修订不覆盖是本组的共识**,两家独立出现同一条(OpenCreator、文到 AI)。Easel 走的是另一条路(按主题归档,不强调版本链)。 + +**3. Agent 与人的分工。** + +- Easel:发布前分级闸门,硬的拦、软的劝。 +- PostSider:read-first / draft-first,Agent 到「送审」为止,发布归人。 +- 文到 AI:插件只填公众号编辑器,不登录、不存草稿、不点发布。 +- Postiz:不自动化、不抓取。 + +⇒ 四家的落点不同,方向一致:**把不可逆的那一步留给人。** 这条在本组是共识,不是某一家的偏好。 + +**4. 能力怎么加载 / Agent 引擎从哪来。** + +- Easel:自建技能运行时,三层加载(元数据常驻 / 指令触发 / 资源按需),`SKILL.md` 不超过 200 行。 +- OpenCreator:不重写 Agent 引擎,全透传给 Codex,只做生命周期、事件归一化、持久化、调度与 UI。 +- 文到 AI:能力库,把多步骤编排成一套「创作方案」。 + +⇒ 这是**唯一的真分歧**:自建运行时(Easel)对上透传上游(OpenCreator)。两种都能跑,代价不同,见 §7 与 §9.2 第 1 条。 + +--- + +## 7. 优势与不足 + +每条都写清「相对谁 / 什么场景 / 什么结果」。逐家的完整强弱清单(每条四行)在独立体 §6,本表只留横向判断。 + +| 竞品 | 优势 | 不足 | +|---|---|---| +| **Easel** | 相对另 4 家,**唯一**覆盖「发现到归因」全闭环;在「要让内容越做越贴账号」的场景下,归因回写画像,输出持续收敛 | 相对 Postiz,发布环节用浏览器自动化;在「账号安全优先」的场景下,有风控、限流、封号风险(README 自陈)。安装门槛也高(Node 版本窗口窄,还要 FFmpeg 和 Chromium) | +| **OpenCreator** | 相对另 4 家,**媒体生成能力最强**;在「批量做多语言视频」的场景下,十项工具加 108 模板,边际成本近零。工程治理也最重 | 相对自建引擎者,**上游强耦合** —— Codex 一次破坏性变更就可能整体不可用。另外它**不做发布**,用户得另找出口 | +| **文到 AI**(文档级) | 相对另 4 家,**单平台纵深最完整**;在「只做公众号、要在意数据留本机」的场景下,端到端本地完成。产品侧 13 天发了 11 版 | 相对开源同行,**闭源**(全仓 5 blob),用户无法自审、无法二开;GitHub 侧只发文档(3★),社区支持弱 | +| **Postiz** | 相对另 4 家,**生态最成熟、星标最高、迭代最快**;在「要稳定排期与协作」的场景下,30+ 平台走官方 OAuth,合规且省维护 | 相对 Easel,**不做内容生产**。相对自用者,AGPL-3.0 意味着一旦作对外网络服务就得开放源码 | +| **PostSider** | 相对 Postiz,**把 Agent 桥做成了独立件**(19 工具 MCP 加 API 加 SDK);在「要把发帖接给 Agent」的场景下,接入成本最低 | 相对 Postiz,**单人开发、10★、发布停在 v1.2.0**,且已放弃跟随上游。作设计样本有价值,作可依赖上游风险高 | + +--- + +## 8. 竞品能力矩阵 + +``` +能力 / 场景 Easel 文到AI OpenCreator Postiz PostSider 机会 +① 发现热点 强 中 弱 弱 弱 ← 全组普遍弱 +② 选题与计划 强 强 中 — — ← 生产侧已有解 +③ 内容生产 强 中 最强 中 主动放弃 ← 差异化主战场 +④ 多平台发布 中(自动化) 弱(半) 无 最强 最强 ← 合规路线二选一 +⑤ 归因回写 强 中 无 中 中 ← 只有 Easel 成闭环 +⑥ Agent 可调用面 中 无 中 强 最强 ← 已成基础能力 +⑦ 发布安全闸门 强(分级) 中 无 强 强 ← 已成基础能力 +⑧ 本地优先/免密钥 强 强 强 弱 弱 ← 做内容侧共识 +``` + +这张矩阵能看出五件事: + +**已经是基础能力、不再构成差异的**:⑥ Agent 可调用面、⑦ 发布安全闸门、⑧ 本地优先与免密钥。 + +**能拉开差距的**:③ 内容生产(OpenCreator 最强)、④ 多平台发布(Postiz 和 PostSider 最强)。 + +**某家独有的**:只有 Easel 做出了 ⑤ 归因回写闭环;只有 PostSider 把 MCP 做成了独立产品件。 + +**普遍做得不好的**:① 发现热点 —— 做内容的三家里两家只是「有」,发内容的两家几乎不管。 + +**还没被解决好的需求**:④ 的**合规自动化**。现在只有「浏览器自动化(有风险)」和「OAuth 或只填充(要人工)」两条路,没有第三条。 + +**取值口径**:本矩阵只保留能区分竞品的行。⑦⑧ 作为「共识能力」行列保留,用途是提示「不必在这里找差异」。 + +--- + +## 9. 可借鉴点与产品机会 + +三类分开写。**每条第 4 段「它现在怎么做」的完整版在独立体 §7**,本节做的是三类汇总,并追回 §4 / §5 / §7。 + +### 9.1 该借鉴(竞品已验证有效,且与自有目标一致) + +**可以直接搬的工程做法**(成本低、边界清晰): + +1. **技能 / 工具契约独立成包 + 版本常量**(OpenCreator)—— 三端同源最低成本的一步。 +2. **状态机 + 版本号 + 幂等键三件套**(OpenCreator)—— 为「远端到底收没收」专设 `unknown_remote_acceptance` / `abandoned_unknown` 两态。 +3. **工具契约独立成断言目标**(PostSider)—— 把「Agent 能看到哪些工具」写死成独立清单,静默增删改名会直接测试报红。 +4. **每个工具显式声明四个风险注解**(PostSider)—— `readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`。 +5. **换牌与二开闸门**(PostSider)—— `.rebrand-allowlist` + `rebrand-check.mjs`(CI `exit 1`)。 +6. **迁移回滚按「演练先行 + 不变量 SQL + 幂等复验」做**(OpenCreator)—— 只建临时库,第二次修复必须 `repaired=0`。 +7. **性能门禁写进 CI 并带硬阈值**(OpenCreator)—— 请求数、DOM 峰值、Long Task、gzip 预算。 +8. **「技能文档与脚本参数」机器校验**(Easel)—— 防文档漂移。 +9. **独立更新清单**(文到 AI)—— `stable.json`:`channel` / `publishedAt` / `supportedPlatforms` / 逐包 `sha256` / 升级策略三字段。 +10. **可用版本回退的运行组件管理**(OpenCreator)—— 定期检查更新但永不自动安装,失败时保留当前可用版本。 + +**高价值的产品设计**: + +11. **技能三层加载,`SKILL.md` 控制在 200 行内**(Easel)。 +12. **发布前分级闸门:一道硬、一道软**(Easel)。 +13. **出站内容安全要分级而不是全禁**(Easel)。 +14. **「工作台」与「对话」共用同一状态机,修订产生新版本而非覆盖**(OpenCreator)。 +15. **read-first / draft-first 的产品边界**(PostSider)。 +16. **画像六维,记忆作用域收敛到画像目录**(Easel)。 +17. **付费操作的前置协议**(Easel)—— 先给范围、计划、费用预估再请求。 +18. **本地与免密钥 provider 作一等公民**(OpenCreator、文到 AI、Easel 共同)。 +19. **技能市场的合规面**(OpenCreator)—— 每条带七项风险声明、给 Agent 的指令、给人的步骤、商业许可审查位。 +20. **`AGENTS.md` 的分级验证铁律**(OpenCreator)—— 同时治「动不动跑全量测试」和「用没跑的验证暗示无回归」。 + +### 9.2 该避开(竞品存在明显问题,不照搬) + +1. **同一条产品线里不能既自动发、又宣称合规。** Easel 走浏览器自动化(README 自陈风控风险),Postiz 走官方 OAuth、不抓取不自动化。两条是互斥的设计红线,选一条走到底。(追回 §4 ④、§5.3) +2. **不把「薄壳透传」当默认路线**(OpenCreator)—— 省工期的对价是上游一次破坏性变更就可能整体不可用。 +3. **不让对外文档与发行状态脱钩**(文到 AI)—— README 停在「尚未发布」,实际已发 10 个版本。对外文档必须有「最后校准时间」。 +4. **不留命名双轨**(OpenCreator)—— 产品改名了,内嵌 CLI、脚本、技能前缀还用旧名。 +5. **不用未核实授权的素材**(OpenCreator 自述案例)—— 来源没复测的一律先设 `draft`。 + +### 9.3 可突破(需求真实存在,竞品解决得不够好) + +1. **发现热点这一段普遍弱**(追溯 §5.1 ①、§8 ①)。三家「有」但不深,两家不管。机会在把「找题」做成真正的入口。 +2. **合规的自动发布是空白**(追溯 §8 ④)。现有两条路是「有风险的自动化」和「要人工的半自动」,**第三条路**(平台侧可控通道加分级确认)还没人做好。 +3. **做内容与发内容之间那段桥,还是空的**(追溯 §2、§4 ④)。用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。 + +--- + +## 10. 结论(产品层) + +1. **用户最核心的需求**是让「该做什么 → 做出来 → 发出去 → 知道效果」这条链跑通,并且越跑越顺,而不是买到某一项最强的功能。 +2. **竞品共同解决了什么**:③ 内容生产(有模板或技能就够用)、④ 多平台发布(30+ 平台已是基础)、⑥ Agent 可调用面(已成基础能力,不再是卖点)。 +3. **竞品共同存在什么问题**:① 发现热点普遍弱;④ 的合规自动化没人做好;⑤ 归因闭环只有一家做成。 +4. **已经是基础能力的**:Agent 可调用面、发布安全闸门、本地优先与免密钥。 +5. **还能形成差异的**:内容生产的批量化与本地化(OpenCreator 路线);归因回写形成复利(Easel 路线)。 +6. **本产品应优先解决什么** —— 先立规范再堆能力。① 技能和工具先有规范且机器可校验;② 再立契约层,可版本化、可断言;③ 发布这类不可逆动作一律设分级闸门;④ 工程治理直接内化(分级验证铁律、把 `unknown` 当一等结论、迁移演练加幂等复验)。 +7. **一句话**:本组没有对手,只有零件。Easel 给「技能即能力加治理闸门」的骨架,OpenCreator 给「契约化加治理铁律加迁移演练」的工程底座,Postiz 和 PostSider 给「分发中枢加 Agent 桥」的接口范式,文到 AI 给「单平台纵深加发布边界」的产品取舍。最划算的路径是:以 Easel 的技能体系为主干,以 OpenCreator 的契约与治理为工程底座,以 PostSider 的 read-first / draft-first 定发布边界,许可上只搬 Apache-2.0 那一侧的代码。 + +--- + +## 附 A. 许可与合规速查 + +要复用代码,只在 **Apache-2.0**(Easel、OpenCreator)里取。取 Easel 时先确认内联的 `gzh-design`(AGPL-3.0)是否在交付路径上。 + +只借鉴设计、不搬代码,这 5 项都能看。 + +要把 AGPL 项目(Postiz、PostSider)改后作网络服务对外,须开放对应源码;内部自用不受约束。 + +要复用官方文案、截图或品牌素材,**只有文到 AI 明确禁止**(proprietary,`NOTICE.md`);其余以各自 LICENSE 为准。 + +## 附 B. 风险总表 + +| 项目 | 风险 | 级别 | 依据 | +|---|---|---|---| +| Easel | 平台风控:自动化发布到小红书存在验证、限流、封号风险 | 高 | README 加 `skill-xhs-publisher` 风险段逐字(独立体 Easel §六 弱 2) | +| Easel | 许可混用:主体 Apache-2.0 但内联 `gzh-design` 是 AGPL-3.0 | 中 | 独立体 Easel 附录「仓库自述口径差异」 | +| Easel | 依赖重、安装门槛高(Node 版本窗口窄) | 中 | 独立体 Easel §六 弱 1 | +| 文到 AI | 无 LICENSE:文案、截图、品牌素材均不可复制 | 高 | `NOTICE.md` 逐字(独立体 文到 AI 附录「许可提醒」) | +| 文到 AI | 「免费」边界未核实(changelog 出现「商用绿色版」) | 中 | 独立体 文到 AI 附录「查不到 / 待核实」第 3 条 | +| 文到 AI | 闭源加静默更新(`allowSkip: true`) | 中 | 独立体 文到 AI §五 机制 3 | +| OpenCreator | 上游强耦合:Codex 一次破坏性变更就可能整体不可用 | 高 | 独立体 OpenCreator §六 弱 1 | +| OpenCreator | 素材与商标再分发许可未在仓内单独声明 | 中 | 独立体 OpenCreator §六 弱 4 | +| Postiz / PostSider | AGPL-3.0 网络服务义务加上游署名义务 | 高(若对外) | `ATTRIBUTION.md` 逐字(独立体 Postiz 与 PostSider §五 机制 8) | +| PostSider | 单点风险:单人、10★、发布停在 v1.2.0 | 高 | 独立体 Postiz 与 PostSider §六 弱 1 | +| 全组 | **平台合规路线二选一,不可混**:Easel 走浏览器自动化,Postiz 走官方 OAuth,文到 AI 只填充不代发 | 高(设计红线) | 独立体 Easel §六 弱 2、Postiz 与 PostSider §七 该避开 1 | + +## 附 C. 取证一致性复核(冲突读数,以原始件为准) + +1. **Easel 技能数 113 与 114 冲突,以 114 为准**。`easel.tree.stat.json` 里 `skills_openclaw_dir_count = 114`、`skillmd_count = 114`,用 `取证/api/easel.tree.json` 复算一致。113 是 README 旧徽章和能力地图的口径。 +2. **Postiz 文件树「截断前」的措辞有误,实际未截断**。`_summary.json` 里 `tree_total_blobs = 1018`、`tree_truncated = false`。真正被截断的是 OpenCreator 的树,已用 11 份分片补全。 +3. **PostSider 连接器 33 与 34 冲突**。34 是仓库里 `*.provider.ts` 的文件数(源码级),33 是 README 口径,30+ 是官网营销语,三者口径不同,引用时要标明。「活跃注册数」仍未逐条核对。 +4. **OpenCreator 模板 108(79 / 28 / 1)**:`tree.stat.json` 的 `template_entries_by_category` 三档全为 0,该派生字段失真,须以原始分片 `tree_template.json` 为准,复算吻合。 +5. **Postiz 版本口径不一**:`version.txt` 是 v1.47.0,releases 最新是 v2.25.0(2026-10-02),两处口径不一,原因查不到。 + +## 附 D. 已知取证缺口(照抄《目标执行状态.md》,不补编) + +**全组共性**:五家的真实用户量、下载量、营收基本查不到(Postiz 自述「7M downloads」但没有口径)。**真实运行证据为零** —— 全程只做静态取证,未安装、未编译、未运行任何命令。 + +**Postiz 与 PostSider**:fork 点(GitHub 未标记 fork、无 parent 指针)与改动行数(tree API 只给 blob sha,行级 diff 需要 clone 两侧)都未取到。PostSider「33 个活跃连接器」的口径未逐条核对;是否有托管云服务查不到。 + +**Easel**:CI 称 38 条技能自带测试,实际只测到 6 个测试文件;114 技能的 `layer` 源码级分布没做;`SKILL-SPEC` 的 `test1.*` 约定整树零文件;`.env.example` 里 `xhs-maas` / `agnes` provider 的来源未核实。技能可用率没有实测。 + +**OpenCreator**:商业与规模证据全缺;技能市场「上架态」口径未核实;`docs/plans/` 10 份计划的落地率未核;火柴人、头像、音频的再分发许可未核;`runtime/`(183 个 blob,其中 `.go` 163 个)只做了结构级取证;语言构成是按文件数口径(与官方字节口径不可混)。 + +**文到 AI**:源码级面全部查不到;「商用绿色版」是什么查不到;`updates/versions/` 只到 0.0.115 而 `stable.json` 已到 0.0.123,原因查不到。 + +## 附 E. 来源与取证时间 + +五个对象仓库: + +1. `https://github.com/ZJU-REAL/Easel`(`main`) +2. `https://github.com/wendaoai/wendao-content-workbench`(`main`;主页 `https://www.asfop.top/`) +3. `https://github.com/krillinai/OpenCreator`(`master`) +4. `https://github.com/gitroomhq/postiz-app`(`main`;官网 `https://postiz.com`) +5. `https://github.com/lumizone/postsider`(`main`;官网 `https://postsider.com`) + +| 棒次 | 产物 / 证据 | 取证时间(CST) | 落点 | +|---|---|---|---| +| 第 1 棒 | 5 项目元数据、README、文件树 | 2026-10-07 16:13–16:17 | `取证/api/*.{repo.json,README.md,tree.json}` 加 `_summary.json` | +| 第 2 棒 | Postiz / PostSider 同源双形态,fork 差异 | 2026-10-07 16:40–17:05 | `取证/api/fork/`(19 件)加 `fork-diff.json` | +| 第 3 棒 | Easel 深度分析 | 2026-10-07 17:06–17:19 | `取证/easel/`(17 件)加 `easel.tree.stat.json` | +| 第 4 棒 | OpenCreator 深度分析 | 2026-10-07 17:37–17:56 | `取证/opencreator/`(76 件)加 `opencreator.tree.stat.json` | +| 第 5 棒 | 文到 AI 分析(文档级) | 2026-10-07 18:07–18:10 | `取证/wendao/`(20 件) | +| 第 6 棒 | 跨项目汇总对比(本份第一版前身) | 2026-10-07 18:31–18:5x | `归档-1b旧口径/1b-竞品分析-跨项目汇总对比__旧口径-20261007.md` | +| 第 7 棒 | 5 份独立分析体重写(产品视角七节) | 2026-10-07 21:40–22:01 | `证据附卷/`(5 份) | +| 第 8 棒 | 汇总对比体按新边界重排(本份) | 2026-10-07 22:3x | 本文件 | + +--- + +## 这一版跟上一版的实质差别 + +上一版(21:41 写)已经按新方法论重排过一次,也过了「说人话」。但它**写在新版独立体之前** —— 4 份独立身体是 21:58 到 22:01 才落盘的。于是它对边界、对证据等级的分类都停在旧认识上。 + +这一版的实质差别,逐条列: + +1. **证据等级从两级改成三级。** 上一版写「证据分两级:源码级 / 文档级,本次只有文到 AI 落在文档级」。新版独立体里 Easel 是「源码级 + 官方文档级 + **界面级**」(4 张官方截图),是本组唯一有界面级证据的一家。这一级是重写独立体时才补上的,上一版没有。 + +2. **§3 用途从「逐家细述」改成「一行一家的基线」。** 上一版 §3 用一张三列表把五家的形态、给谁用、干什么用逐格写满,和独立体 §2 的用途四行重复。这一版只留对比基线,明写「完整四行在独立体 §2」,不再重抄。 + +3. **§5.1 后半的六项能力详述删掉了。** 上一版在能力矩阵后面又挑了六项能力(技能即能力 / 创作模板体系 / 公开 API / 卡片工坊 / 能力库 / 画像记忆)逐条展开,那是逐家产品面,归独立体 §4。这一版只留矩阵加横向解读。 + +4. **§6 从「逐家机制罗列」改成「同一机制横向对比」。** 上一版 §6 六条里,四条是单家机制(OpenCreator 两投影状态机、Easel 三层加载与分级闸门、OpenCreator 透传 Codex、Easel 画像记忆),按 §0.4 归独立体。这一版换成四组横向:记忆作用域、改稿与版本、Agent 与人的分工、能力加载与引擎来源 —— 每组比的是「同一个问题各家怎么解」。 + +5. **§7 表加了指引,§9 明标「细节在独立体 §7」。** 优势不足表与三类汇总保留(它们是汇总体该写的),但都加了一行「完整清单在独立体 §6 / §7」,避免读者以为本份就是全量。 + +6. **清掉悬空的节号引用。** 上一版 附B 依据列写「第 2 棒 §八·4、第 3 棒 §十三·1」,上一版 附D 写「照抄《目标执行状态.md》§八」—— 这些指向的是旧棒次文档的编号,新版独立体早改成七节结构。这一版全部换成**指向新版独立体的节号**。 + +7. **§4 场景矩阵给文到 AI 那一列加了证据警示。** 上一版直接填格;新版独立体已明确文到 AI 的场景「六行里三行整行取不到」。这一版在表下加了警示行,说明那一列只到官方自述粒度。 + +8. **§4 处境的格子从「技能计数」改成「能力强弱」。** 上一版写「有,9 个热点技能加基础 6,共 15」「有,114 个技能」这类计数 —— 计数是独立体的事。这一版只留强弱与做法。 + +9. **附 E 补了第 7、8 两棒。** 上一版只到第 6 棒;这一版把「第 7 棒 独立体重写」「第 8 棒 汇总重排」补上,时间对得上。 + +**没变的部分**(事实一条没丢):竞品池分层与纳入理由、§8 能力矩阵的八行与五个判断、§9 的三类条目、§10 的七条结论、§附 A 到 §附 D 的许可、风险、冲突读数与缺口。 + +--- + +*本份是 1b 竞品分析的**汇总对比体**(第二版,2026-10-07 22:3x 按方法论 §0.4 收紧为纯横向)。**独立分析体**见 `证据附卷/`(5 份);原始证据见 `取证/`;旧口径原件见 `../归档-1b旧口径/`;本次改版前版本见 `../归档-说人话重写前-20261007/`。本版落在目标目录 `72111e` 内,⛔ 未覆盖 `research/1b-竞品分析.md`。* diff --git a/docs/pm/mcn-shortvideo-agent/ui/3b-实测记录.md b/docs/pm/mcn-shortvideo-agent/ui/3b-实测记录.md new file mode 100644 index 0000000..c8c6be2 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/ui/3b-实测记录.md @@ -0,0 +1,311 @@ +# 3b 交互原型 · 实测记录(V5 · 侧栏回基准形态 + 刷新改 icon) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3b 子步产出 +> 落点:`执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/ui/3b-实测记录.md` +> 本轮范围:用户 2026-10-10 两条口令 —— ① **左侧导航改回设计供给的基准形态**(`128px` 横排 → `64px` 竖排药丸浮栏,图标在上、名字在下);② **刷新按钮改 icon 并挪到页面标题行右侧**。🔴 硬约束(用户逐字):「**没让改的 交互不允许乱改**」⇒ ⛔ 导航项名与顺序、页数、每页板块、流转契约、其余任何交互**一格未动**。 +> ⛔ 本份的数全部现取,一个都不许凭记忆填。数据源:`#/selftest` 全文 + `_tools/` 8 个脚本。 +> 🔴 取证全程走「只连不起」:本机 `9223` 常驻独立 Chrome,一个任务只开一个标签并复用,换视口走 `Emulation.setDeviceMetricsOverride`。 +> ⚠️ **保活方式的实话**:派活单写的是「计划任务 `bh-chrome-keepalive` 保活」,但本机该计划任务 **2026-10-10 已撤销**;`browser-harness/SKILL.md` §1 现写「**只许本会话后台任务**这一种方式」。⇒ 本轮按**磁盘现行纪律**走:用本会话后台任务跑 `bh_chrome_keepalive.py`,会话结束浏览器随之下线。此处与派活单不一致,据实留痕。 + +--- + +## 一、自检全文(1440×900,PASS 80 / FAIL 0) + +原样取自 `_tools/grab_selftest.py`,未删行、未改字。全文 87 行,此处逐条列。 + +``` +自检结果:PASS 80 / FAIL 0 + +PASS 路由 #/p/p1 渲染出 6 个顶层节点 +PASS 路由 #/p/p2 渲染出 5 个顶层节点 +PASS 路由 #/p/p3 渲染出 4 个顶层节点 +PASS 路由 #/p/p4 渲染出 5 个顶层节点 +PASS 路由 #/p/p5 渲染出 5 个顶层节点 +PASS 路由 #/p/p6 渲染出 5 个顶层节点 +PASS 路由 #/p/p7 渲染出 5 个顶层节点 +PASS 六态 × 七页 = 42 个组合,全部渲染出内容 +PASS 页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8) +PASS 导航一层七项:7 个功能项、一项一页,零组标 / 零跨组线(⛔ 没有第二层) +PASS 导航七项与用户口径逐字一致、顺序相同:首页 / 选题 / 创作 / 投放 / 复盘 / 账号 / 资产(资产排最后) +PASS 七页一次点击可达:侧栏 7 个功能项直达(⛔ 已撤销「功能入口」那一层,跨页入口只留在侧栏与板块内行级动作) +PASS 侧栏基准形态:64px 药丸浮栏、导航项 56×78、图标在上(24px)名字在下(两字常驻);≤640 回横滚标签条 +PASS 页面级刷新:七页各 1 个 icon 按钮挂在页面标题行右侧(无文字、带 title/aria-label),⛔ 不再独立占一行 +PASS 清单里每个 ID 都在页面上出现过(90 个,无悬空声明) +PASS 页面上每个 data-act 都在清单里(共 683 次出现,无未登记的可点元素) +PASS 清单里 86 个 ID 都真驱动过并给出可见反馈,0 个死控件(25 个场景,每个实例各重置一次) +PASS 当刻被禁用的控件 4 个(按契约在特定条件下不可点):P4-03, P5-06, P6-03, R-02 +PASS 清单里每个 ID 都至少被驱动过一次(无「从未跑过」的条目) +PASS 侧栏 7 个功能项逐个点过,每一项都落到了自己那一页 +PASS 五处「输入后才可用」的联动都通:其中 5 处在空输入时确实是禁用的 → 输入后转可用 → 点了有反应 +PASS P7「确认与改判」是回写的**前置开关**:未采纳时回写禁用、采纳后转可用(不是只留痕) +PASS 工具型纪律:零 .eyebrow / 零 .lead / 零 .hero +PASS 入场编排不做逐区块:@keyframes 共 0 处 +PASS 骨架冻结:七页 39 个板块的数量与顺序与新版 2b「业务板块清单」逐位一致,⛔ 未增删挪 +PASS 页面公共框架(Page Shell):七页各恰好 1 个,且都不带 .block / 不带 .block-head h2 ⇒ 不计业务板块数、不占冻结计数 +PASS 对象冻结:七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内(或显式「—」+说明),且与 OBJ_MAP 逐块一致 +PASS 功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立) +PASS 辅助入口区:每页最多 1 个跳转入口 ⇒ ⛔ 没有把流转表在框架层重写一遍 +PASS 「功能入口」那一层已撤销:.sect-nav / .data-card / .data-cards 在七页**逐页**出现 0 次(2b §九第 2 条) +PASS 结构 ①:七页各一个 h1,标题逐级不跳;每个板块都有文字标题 +PASS 结构 ②:字号 12/14/18/20/24px 共 5 档,相邻差 2/4/2/4,正文档 14–16 在用 +PASS 结构 ④:逐页查过,首屏同屏主档按钮 ≤1 个;本页实底按钮 1 种 +PASS 组件口径:七页都没有用内联 style 表达选中态或覆盖字号(选中态走 .is-on / .is-active,字号走 --fs-* 档) +PASS 交互态与可读性::hover / :focus-visible 都在且没被 outline:none 抹掉;tabular-nums、prefers-reduced-motion、防溢出三件套齐全 +PASS 阴影:面板/卡片都用多层叠层,无单层死黑重阴影 +PASS 间距:flex/grid 的 gap 取值全部落在登记刻度内(9 个刻度) +PASS 浮层「随手记」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(R-03) +PASS 浮层「随手记」打开后焦点在层内(当前=X-close) +PASS 浮层「随手记」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「随手记」Esc 能关 +PASS 浮层「随手记」关掉后焦点回到触发件 G-06 +PASS 浮层「随手记」点遮罩能关 +PASS 浮层「两处假设说明」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个 +PASS 浮层「两处假设说明」打开后焦点在层内(当前=X-close) +PASS 浮层「两处假设说明」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「两处假设说明」Esc 能关 +PASS 浮层「两处假设说明」关掉后焦点回到触发件 G-08 +PASS 浮层「两处假设说明」点遮罩能关 +PASS 浮层「资产选择器」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(PICK-CANCEL) +PASS 浮层「资产选择器」打开后焦点在层内(当前=X-close) +PASS 浮层「资产选择器」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「资产选择器」Esc 能关 +PASS 浮层「资产选择器」关掉后焦点回到触发件 P4-04 +PASS 浮层「资产选择器」点遮罩能关 +PASS 浮层「发布二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(P5-10) +PASS 浮层「发布二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「发布二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「发布二次确认」Esc 能关 +PASS 浮层「发布二次确认」关掉后焦点回到触发件 P5-08 +PASS 浮层「发布二次确认」点遮罩能关 +PASS 浮层「核销二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(CHECKOUT-CANCEL) +PASS 浮层「核销二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「核销二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「核销二次确认」Esc 能关 +PASS 浮层「核销二次确认」关掉后焦点回到触发件 P7-11 +PASS 浮层「核销二次确认」点遮罩能关 +--- 数值取证(布局视口 1440 × 900 ;window.innerWidth 1440)--- +PASS 对比度 --warn 对 --surface = 5.93:1(契约 ≥4.5:1) +PASS 对比度 --accent-text 对 --surface = 4.76:1(契约 ≥4.5:1) +PASS 对比度 --ink-faint 对 --surface = 3.55:1(契约 ≥3:1) +PASS 强调色填充面积占比:七页最高 创作台 = 0.52%(1 个填充块,契约 ≤5%) +量尺寸时滚动零点(P1):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P1) +PASS P1 账号矩阵:首屏从 626px 起,行距 31px,一屏装得下 8 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS P1 账号矩阵行高齐:31–31px,差 ≤2px +PASS P1 实际在用字号档 5 档:12px / 14px / 18px / 20px / 24px(契约 ≥3) +量尺寸时滚动零点(P2):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P2) +PASS P2 对标内容列表:首屏从 462px 起,行距 31px,一屏装得下 14 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS 横向溢出 = 0(scrollWidth 1440 = clientWidth 1440) +PASS 七页逐页查横向溢出:全为 0(最差 p1) +PASS 纵向滚动只由主区承担:.app 高 900px = 视口 900px;body 未承担滚动;主区 overflow-y auto,clientH 851 / scrollH 1392px(内容更高 ⇒ 主区可滚,折叠线以下的块拿得到) +(附)P1 行高 31/31/31/31/31px · 量时 scrollY=0 · 顶栏高 49px · 侧栏 64×606px · 主区 clientH 851 / scrollH 1392 +控制台报错:0 条 +``` + +**要盯的两条**(本轮两处改动各自对应的新判据,就嵌在上面第 15、16 行): + +- 「**侧栏基准形态**:64px 药丸浮栏、导航项 56×78、图标在上(24px)名字在下(两字常驻);≤640 回横滚标签条」—— 治「栏宽 `128 → 64px` + 导航项由横排改竖排」这一处; +- 「**页面级刷新**:七页各 1 个 icon 按钮挂在页面标题行右侧(无文字、带 title/aria-label),⛔ 不再独立占一行」—— 治「刷新由文字改 icon + 从独立行挪到标题行」这一处。 + +**再加三条照旧全 PASS 的**,用来证明「没动别的」: + +- 「页集合正好七页」+「导航一层七项…零组标 / 零跨组线」—— 导航项**名与顺序、层数**一格未动; +- 「骨架冻结:七页 **39** 个板块…逐位一致」—— 每页板块没增删挪; +- 「清单里每个 ID 都在页面上出现过(90 个)」+「86 个 ID 都真驱动过…0 个死控件」—— 撤 `SP_LABEL` 文案、改按钮形态后,交互清单仍干净。 + +--- + +## 二、变异对照(27 条,27 / 27 通过) + +做法:把原型复制一份、注入**一处已知的假病**,再跑一次自检 ⇒ 必须报红、且红在**预期的那一条**上。测完即删临时件。基线(未注入)= `PASS 80 / FAIL 0`。 + +> 为什么必须有这一节:一个永远 PASS 的自检等于没有自检。只有「注病 → 报红 → 复原 → 回绿」这条链走通了,上面那 80 个 PASS 才算证据。 + +| # | 注入的假病 | 结果 | 红在哪 | +|---|---|---|---| +| M1 | 掏空 `P2-01` 的实现(点了没反应) | 79/1 ✅ | P2-01 | +| M2 | P2 表里塞一个没登记的 `data-act` | 78/2 ✅ | 未登记的 data-act | +| M3 | 清单里声明一个页面上没有的 ID | 78/2 ✅ | 声明了但页面里没有 | +| M4 | 给 P3 多塞一个板块 | 78/2 ✅ | 骨架与②段不一致 | +| M5 | 把 `--t-ink-faint` 调到契约线以下 | 79/1 ✅ | 对比度 | +| M6 | `go()` 退回「只改 hash」 | 78/2 ✅ | 驱动了没反应 | +| M7 | 只把 P1 表第一行撑高 | 79/1 ✅ | 行高不齐 | +| M8 | 表格行内衬 `4px → 36px` | 78/2 ✅ | 低于契约 6 行 | +| M9 | 量 P1 前先把主区滚下去 | 79/1 ✅ | 没回零点(视口 768×900) | +| M10 | 给页框架副标题挂 `.lead` | 79/1 ✅ | 出现禁用类名 | +| M11 | 去掉浮层遮罩 | 73/7 ✅ | 没有遮罩 | +| M12 | `closeLayer` 退回「只清状态」 | 75/5 ✅ | 关掉后焦点没回到 | +| M13 | 每个浮层头部多加一颗 × | 75/5 ✅ | 中性关闭出口 = 2 | +| M14 | `.app` 高度退回 `min-height:100vh` | 79/1 ✅ | 高度链没约束住 | +| M15 | 分段控件加回内联 `border-color` | 79/1 ✅ | 内联 style 越权 | +| M16 | 导航第一项「首页」改成「首业」 | 79/1 ✅ | 导航项与用户口径不一致 | +| M17 | P1「账号矩阵」的对象改成字典外的名字 | 79/1 ✅ | 对象冻结出错 | +| M18 | P1 塞回一个 `.sect-nav` | 79/1 ✅ | 功能入口层的残留 | +| M19 | P1 页标题改成「矩阵总揽」 | 79/1 ✅ | 页标题 | +| M20 | 注释掉 `paint()` 里的 `focusIntoLayer()` | 75/5 ✅ | 打开后焦点不在层内 | +| M21 | 往侧栏塞回一个 `.nav-group` 容器(第二层复活) | 79/1 ✅ | 组标与跨组残留 | +| M22 | 把 P8 加回页面表(独立页复活) | 77/4 ✅ | 页面集合不是七页 | +| M23 | F12 的归属页从复盘改成投放(归属漂移) | 79/1 ✅ | 功能与板块对不上 | +| M24 | 摘掉 P4「录制卡片与画板」挂的 F14(悬空功能) | 79/1 ✅ | 功能与板块对不上 | +| **M25** | **把 `--nav-w` 改回 `128px`**(本轮新增判据的对照) | 79/1 ✅ | 侧栏没回到基准形态 | +| **M26** | **把 `.nav-item` 的 `flex-direction` 从 `column` 改回 `row`**(本轮新增判据的对照) | 79/1 ✅ | 侧栏没回到基准形态 | +| **M27** | **往 Page Shell 里塞回一个 `.page-shell-ops` 文字行**(本轮新增判据的对照) | 79/1 ✅ | 刷新按钮没改对 | + +**V5 新增三条的用意**:M25 盯**宽度**、M26 盯**形态**(竖排 vs 横排)、M27 盯**位置**(标题行 icon vs 独立成行)—— 三条各管一处,⛔ 不互相覆盖。⚠️ 每条形态类判据都要防「只测一个维度就以为测全了」:M25 与 M26 是**同一串判据的两条分支**,得分着证。 + +**一处随改动而动的旧条目**:M22 的 FAIL 数由 V4 的 3 条变成 **4 条** —— 因为本轮新增的「页面级刷新」判据会遍历页面集合,P8 复活时它也跟着报红。⇒ 这说明新判据**确实接到了同一张页面表上**,不是摆设。 + +**V4 对 M15 的处置(沿用)**:M15 的注入点是「P2 选题库那个分段控件」。V4 那轮 P2 选题库从**一个**分段控件变成**两个**(进度 + 类型),注入点仍落在第一个上 ⇒ 照旧报红(`内联 style 越权`)。⚠️ **形态一改,注入点要复核** —— 本轮又改了两处(侧栏、刷新按钮),复核过:M1–M24 的注入点全部未受影响,逐个实跑仍能命中。 + +### 2.1 M22 返工两次 —— 「注入点写坏」与「判据报红」是两件事(沿用上一轮留痕) + +第一次 `❌ 注入后自检跑不出来(连输出都没有)`。查下来**不是判据不灵,是注入点写坏了**: + +1. **第一版**:只往 `PAGES` 里塞了个 `p8` 键,没配渲染函数 ⇒ 自检第 1 步渲染 p8 时 `PAGE_FN['p8']` 是 `undefined`,渲染期直接抛错。 +2. **第二版**:补了渲染器,但没在 `STATE_COPY` 里登记 ⇒ 自检第 2 步「六态 × 页面」走到 `statePanel('p8')`,读 `STATE_COPY['p8'].loading` 报 `TypeError: Cannot read properties of undefined`。 +3. **第三版(现在这版)**:改在**启动行**注入 —— 那时 `PAGES` / `PAGE_FN` / `STATE_COPY` 三张表都已就位 ⇒ 报红且红在「页面集合不是七页」。 + +**顺带修了一处取证盲区**:原来 `renderSelftest()` 的兜底分支渲染的块**不带 `id="selftest-out"`** ⇒ 自检一崩,取证工具什么都读不到,变异对照只会得到一句「连输出都没有」,**分不清是注入点坏了还是自检自己炸了**。现在崩了也照正常格式吐一个 `#selftest-out`(head 行写 `PASS 0 / FAIL 1`,正文写栈)。 + +--- + +## 三、闸门脚本(`_tools/`,共 8 个) + +| 脚本 | 判据 | 本轮结果 | +|---|---|---| +| `check_js.py` | ` + + diff --git a/docs/pm/mcn-shortvideo-agent/专题/Easel逆向-热点雷达与选题链路.md b/docs/pm/mcn-shortvideo-agent/专题/Easel逆向-热点雷达与选题链路.md new file mode 100644 index 0000000..14ca10e --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/Easel逆向-热点雷达与选题链路.md @@ -0,0 +1,179 @@ +# 第 1 棒 · Easel 热点雷达与选题链路逆向 + +> 目标:逆向 Easel 的选题(热点雷达)部分怎么搭建、热点到选题怎么实现,并对照现版 P2,给出把样子补成逻辑的方案。 +> 证据等级:**源码级**。14 份文件从 GitHub API 逐份取回(本机 `raw.githubusercontent.com` 连不通,走 `api.github.com/repos/ZJU-REAL/Easel/contents/` 取 base64),原文落在同目录 `取证/`。 +> 取证时间:2026-10-10 | 本棒是调研与方案棒,`2a`/`2b`/原型/`DESIGN.md` **零改动**。 + +--- + +## 一、Easel 从热点到选题的完整链路 + +先把结论摆出来:Easel 的「热点雷达」本身**不做任何判断**。它只干三件事 —— 把六个平台的热榜拉回来、解析成统一结构、给每条挂两个按钮。真正把热点变成选题的动作,在它后面那一层(Plan 层的三个技能)和一个叫「选题库」的中转站里。 + +### 1.1 数据从哪来 + +热榜的取数全在一个文件里:`web/app.py` 第 4666-4682 行。六个平台,每个配**一主一备**两个地址: + +| 平台 | 主源 | 备源 | +|---|---|---| +| 微博 | `v2.xxapi.cn/api/weibohot` | `60s.viki.moe/v2/weibo` | +| 抖音 | `v2.xxapi.cn/api/douyinhot` | `60s.viki.moe/v2/douyin` | +| 知乎 | `api.zhihu.com/topstory/hot-list?limit=50` | `60s.viki.moe/v2/zhihu` | +| B站 | `v2.xxapi.cn/api/bilibilihot` | `60s.viki.moe/v2/bili` | +| 百度 | `v2.xxapi.cn/api/baiduhot` | `60s.viki.moe/v2/baidu/hot` | +| 头条 | `toutiao.com/hot-event/hot-board/` | `60s.viki.moe/v2/toutiao` | + +配套的规矩写在 `skills/shared/hotlist-apis.md`:只用清单里的地址,**禁止直连平台官网**(weibo.com / zhihu.com / douyin.com 和 tophub.today 都对服务器 IP 反爬,返回的是 403 或验证码,不是数据)。请求头伪装成 Chrome 124(`app.py` 4690 行),超时 8 秒。 + +我比较认同这份清单的写法。它把「哪些源能用、哪些绝对不能碰」写成了白名单加黑名单,还标了每条的状态(B站的 `/v2/bili` 直接标「不稳定」)。这比留一句「接入各平台热榜」有用得多。 + +### 1.2 热榜怎么变成结构化条目 + +各平台返回的 JSON 长得完全不一样,Easel 用一段**宽容解析**把它抹平(`app.py` 4684-4736 行): + +- 标题字段试五个 key:`title` / `Title` / `word` / `name` / `keyword` +- 热度字段试六个:`hot` / `hot_value` / `HotValue` / `hotValue` / `num` / `detail_text` +- 链接试三个:`url` / `Url` / `link` / `mobil_url` +- 数据结构可能是数组,也可能是嵌套的 `data.data` 或 `data.list`,两种都判 +- 数组元素可能是字符串(直接当标题)也可能是对象;知乎那条还多一层 `target`,热度藏在 `target.metrics_area.text` 里 +- 知乎的 API 链接单独改写成 `www.zhihu.com/question/{id}`,否则点开是 JSON + +取数顺序:主源 → 备源 → 都失败返回空。`_fetch_platform()`(4739 行)就这么 12 行。 + +缓存(`app.py` 4753-4775 行):按平台缓存,**TTL 300 秒**。拉失败时不清缓存,退回上一次的旧值。接口是 `GET /api/trends?platforms=weibo,douyin,zhihu&limit=12`,`limit` 夹在 1 到 30 之间。返回里每栏带一个 `ok` 布尔 —— 这个字段是给界面用的,用来区分「暂时取不到」和「本来就没数据」两种空。 + +### 1.3 热点怎么变成选题 + +界面在 `web/frontend/src/components/TrendsPage.tsx`,一共 106 行。每条热搜右边挂两个按钮: + +- **收藏到选题库** —— 调 `createIdea({ title, source: "微博热搜", status: "pending" })`,POST `/api/ideas`。溯源字段在写入时就定死,不用用户填。 +- **做内容** —— 调 `onUseTopic(title)`,这个函数的实现在 `App.tsx` 540-547 行,原文是: + + > 围绕当前热点「${title}」:先判断它适不适合我的账号赛道;若合适,给 2-3 个差异化的二创角度,再出文案初稿。 + + 然后新建一个会话、跳到对话页、把这句当用户输入发出去。 + +选题库是另一个文件 `IdeasPage.tsx`。三列看板:`pending` / `doing` / `done`,字段四个 —— `title` / `note` / `source` / `status`,加一个后端生成的 `id` 和 `created`。存储是 `outputs/_ideas.json`,写入走临时文件加原子替换(`app.py` 4904 行)。卡片上三个动作:做内容、排期(写进日历,日期填今天)、推进状态。 + +**这里有个它自己没解决的坑**:收藏按钮的「已收藏」状态存在一个前端 `Set` 里(`TrendsPage.tsx` 25 行),刷新页面就没了;后端 `createIdea` 也不去重。同一个热点点两次,选题库里就有两条。这条我们别照抄。 + +### 1.4 选题怎么变成方案 + +真正有判断力的是 Plan 层的三个技能,它们共享一套评分口径(文件 `skills/shared/scoring-dimensions.md`,标题就叫「唯一标准」): + +**七维打分,每维 1-10 分**。其中「制作成本」和「合规风险」是反向维度,分越高代表越有利,这样七维能直接加权相加。权重是流量潜力 25%、账号匹配 20%、竞争差异化 15%、变现潜力 15%、时效价值 10%、制作成本 8%、合规风险 7%。综合分换算成百分制,三档结论:**≥70 做、50-69 改方向、<50 不做**。 + +三个技能按职责分开: + +- `skill-trending-topics`(discover 层)—— 抓热搜、按赛道过滤、标注相关度高/中/低,挑 3-5 个二创选题。挑选判据四条:有争议性、与定位匹配、时效窗口够、能做出差异化。 +- `skill-trend-rider`(plan 层)—— 拿到**一个**热点后规划怎么蹭。先判热度等级 S/A/B/C,再判生命周期四期(爆发期 0-4 小时、高峰期 4-24 小时、衰退期 1-3 天、长尾期 3 天以上),再判关联度高/中/低/无。**关联度低于「中」明确建议不蹭**。然后给 3 个角度,角度从 6 个模型里挑:专业解读、经验关联、工具方法论、反向观点、情绪共鸣、延伸联想。最后排 5 类风险:政治敏感、法律风险、舆论反转、道德争议、平台规则。 +- `skill-topic-evaluator`(plan 层)—— 单条深评,就是上面那套七维打分,逐维写依据,给「做/改方向/不做」。 + +三个技能都有一条 Profile 感知:读画像目录里的 `identity.md`(赛道定位)、`audience.md`(受众)、`platforms.md`(活跃平台)、`style.md`(风格)。没有画像就退回通用模式,并在输出里明说「提供 Profile 可更精准」。 + +### 1.5 走一遍完整链路 + +1. 用户打开热点雷达,默认勾微博、抖音、知乎三栏,每栏请求 15 条 +2. 后端按平台查缓存,超过 5 分钟才真去拉;主源挂了走备源;都挂了用旧缓存,界面标「该平台暂时取不到」 +3. 用户看到一条想做的,点「做内容」或先「收藏」 +4. 收藏的进选题库,带来源、状态 pending +5. 点「做内容」,系统自动生成一句带「先判断适不适合我的赛道」的 prompt,开新会话发出去 +6. Agent 在对话里跑 trend-rider 或 topic-evaluator,用七维口径打分,给结论 +7. 觉得值得做,从选题库点「排期」,落进日历;状态推到 doing 再到 done + +--- + +## 二、与现版 P2 逐项对照:我们缺哪些逻辑 + +现版 P2(选题雷达)的四块是:对标监控概览、对标内容(带倍数)、评论区洞察、选题库(进度 × 类型)。对照下来,**缺口不在「少几个按钮」,在「两个数字没有算出来的路径」**。 + +| 维度 | Easel | 现版 P2 | 缺口 | +|---|---|---|---| +| 输入源 | 六平台热搜,一主一备 | 对标账号 + 评论 | 🔴 没有平台热榜这一路 | +| 热度值 | 原始 hot 值 + 排名 | `mult` 写死字符串 | 🔴 没有分母、没有窗口 | +| 分级 | S/A/B/C + 四期生命周期 | `zone` 三个字面值 | 🔴 没有阈值、没有算法 | +| 转化 | 收藏带 source + 生成 prompt | 「转入创作」按钮 | 🔴 不带「先判关联度」 | +| 筛选 | 七维打分,≥70 做 / <50 不做 | 无 | 🔴 没有筛选判据 | + +逐条展开: + +1. **没有平台热榜这一路输入。** Easel 的雷达是「平台在热什么」,我们的 P2 是「对标号在发什么」。两件事不冲突,但我们的 S1「找选题」缺了最直白的那一半 —— 用户每天刷的就是热榜,现在只能靠人自己去看,再回到 P2 记灵感。 + +2. **`mult` 倍数没有分母。** 原型里写的是 `'4.8×'`、`'6.4×'` 这些字面量。`2a` F1 的验收要点说「标注了它相对该账号平时水平的倍数」,但「平时水平」是什么 —— 近 7 条的中位数还是近 30 条的平均数?窗口多长?样本不足 3 条时给不给倍数?一处都没写。这个数字现在是**画出来的,不是算出来的**。 + +3. **`zone` 分类没有判据。** 三个值:低粉爆款、异常值、常态。我在原型和 `2a`/`2b` 里都没找到「凭什么进哪一类」。`2a` F1 的验收要点只说「能指出哪几条是异常值」,没说异常值的门槛。Easel 那边对应的是 S/A/B/C 四档加明确的生命周期定义,我们的三个值没有这一层。 + +4. **热点进选题库没有「先判断」这一步。** Easel 在「做内容」时自动带上一句「先判断它适不适合我的账号赛道」。我们原型的「转入创作」按钮(`P2-09`)直接跳,`2a` F2 也没写这一步。跳过去之后创作台拿到的是一条选题文本,不带任何判断结果。 + +5. **选题的溯源字段只有界面有,文档没立口径。** 原型 `TOPICS` 每条带 `src`(如「对标号 · 小食光」「灵感速记」),但 `2a` 的 `Topic` 对象行只写「含它的来源与分类」,没写来源是必填、由谁写、跨页带哪几个字段。Easel 在 `createIdea` 那一刻就把 source 定死了,我们靠人填或者靠默认。 + +6. **没有缓存、降级与「取不到」的界面表达。** Easel 有 300 秒缓存、主备切换、失败退旧值、`ok` 标志区分两种空。我们 `2a` F1 的治理里写了「退避重试 3 次后转手工录入」,但没写缓存,也没写界面怎么区分「拉不到」和「本来没有」。原型里 `BENCH` 是常量,永远成功,所以这个问题还没暴露。 + +7. **P2 缺少账号维度参与筛选。** Easel 所有 discover 和 plan 技能都读画像做赛道过滤和相关度标注。我们 P2 的核心对象是 `Benchmark` 和 `Topic`,不掺 `Account`。结果是:对标号 A 的爆款和对标号 B 的爆款混在一张表里,不按「当前在为哪个账号找选题」过一遍。 + +8. **去重只做在前端内存 —— 这条 Easel 自己也没做对。** 前面说过,`TrendsPage` 的已收藏状态是内存态 `Set`,刷新即失效,后端不去重。我们 `2a` F2 的治理里已经写了「同一条灵感重复提交按内容 hash 去重」,这条我们比它强,保持住,别照抄它。 + +--- + +## 三、把样子补成逻辑的落地方案 + +方案分三层。**下面所有数值都是我给的建议值,等拍板,本棒一个字没改 `2a`/`2b`/原型。** + +### 3.1 数据层:给 P2 补一条真实的输入(对应缺口 1、6) + +P2 现在没有一个会失败的数据源,所以「失败长什么样」这件事根本没被设计过。补一条热榜进来,顺带把失败面建起来。 + +- 数据源清单照 Easel 的白名单写法:每个平台一主一备,禁连平台官网。清单本身是一份独立文件,不在代码里散着。 +- 缓存按平台走,TTL 5 分钟。拉失败不清缓存,退回旧值并标时间戳。 +- 界面必须能区分两种空:「这个平台现在取不到」和「这个平台本来没数据」。判据就是 Easel 那个 `ok` 布尔值。 + +### 3.2 判据层:把 `mult` 和 `zone` 写成能算的(对应缺口 2、3) + +这两个数是现在「只有样子」的根源。我建议的口径: + +**`mult` 倍数** +- 基线=该对标号**近 30 条**内容的播放量**中位数**(不用平均数,爆款会把平均数拽歪) +- 倍数=本条播放量 ÷ 基线 +- 样本下限:不足 10 条时不给倍数,界面显示「样本不足」,不显示一个假数字 +- 窗口:基线每天重算一次,不实时算 + +**`zone` 分类** +- 异常值:倍数 ≥ 3.0 +- 低粉爆款:倍数 ≥ 2.0 且 该号粉丝数 < 1 万 +- 常态:其余 + +三个阈值(30 条、3.0、2.0、1 万)都是我拍的,需要有数据之后回校。但**必须先有阈值,哪怕是错的** —— 有阈值才知道错在哪,没有阈值永远只是三个标签。 + +### 3.3 转化层:热点进选题库要带判断(对应缺口 4、5、7) + +- 「转入创作」发出的不是一条裸标题,而是一句带判断要求的 prompt,学 Easel 那句:先判这个词适不适合当前账号,合适再出角度。 +- 选题的 `source` 在**写入那一刻**由系统定死(`2a` F2 补一句「来源必填,由产生它的功能写入,不靠用户填」),跨页只传 ID 加来源。 +- P2 的对标列表按「当前在为哪个账号找选题」过一遍。这条要动到 P2 的核心对象(`2b` §五 P2 现在写的是 `Benchmark` + `Topic`),是把 `Account` 加进来做筛选条件,还是只在界面上加个账号切换器 —— 我倾向后者,理由是不动对象字典、改动面小。 + +### 3.4 建议的落地顺序 + +先做 3.2(判据层)。它是零数据源就能落地的,把 `mult` 和 `zone` 从字面量改成算出来的,P2 立刻从「样子」变成「一半逻辑」。再做 3.3,因为它只动文本和字段。最后做 3.1,因为它要接外部接口,失败面最大。 + +--- + +## 附:取证清单 + +**取到的 14 份**(落在同目录 `取证/`,`/` 换成 `__`): + +`web/app.py`(237 KB,热点与选题两块的后端全在这里)|`web/frontend/src/App.tsx`|`TrendsPage.tsx`|`IdeasPage.tsx`|`lib/api.ts`|`skills/shared/hotlist-apis.md`|`skills/shared/scoring-dimensions.md`|`skill-trending-topics/SKILL.md` + `EASEL-META.md`|`skill-trend-rider/SKILL.md` + `EASEL-META.md`|`skill-topic-evaluator/SKILL.md` + `EASEL-META.md`|`skill-ugc-discovery/SKILL.md`|`skill-content-matrix/SKILL.md` + +**取不到 / 没取的**:`skill-community-ops/references/topic-mining.md` 之前那份分析里提到过,本次未单独拉取(与热点雷达主链无关)。Easel 的运行态数据(真实调用成功率、各源可用率)**取不到** —— 本次是纯静态取证,没有运行 Easel,所以「这些源现在还活不活」只能按它文档里标的状态读,不能当我验证过。 + +**旁证**:`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/证据附卷/1b-竞品分析-Easel.md`(2026-10-07 那份七节分析体,热点雷达部分只写到界面级)。 + +--- + +## 附:输出检查 + +- [x] 三条判据逐条有结论(落在同目录 `目标执行状态.md` §二) +- [x] 数据来源写到了具体端点与行号 +- [x] 判据写到了具体阈值与换算口径 +- [x] 转化步骤从「拉回来」写到「进日历」,七步全在 +- [x] 逐项对照列了 8 条缺口,每条标明缺的是哪一层 +- [x] 落地方案给了顺序,且明说本棒零改动 +- [x] 已过「说人话」五维评分:**47/50** diff --git a/docs/pm/mcn-shortvideo-agent/专题/GPT建议-热点与选题细节.md b/docs/pm/mcn-shortvideo-agent/专题/GPT建议-热点与选题细节.md new file mode 100644 index 0000000..ff96819 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/GPT建议-热点与选题细节.md @@ -0,0 +1,949 @@ +# GPT 对「热点与选题板块细节」的建议(逐字留痕) + +> 本文件逐字保留外部模型的回复,不做转述、不做压缩。 +> 用途:为《热点与选题-功能细节》提供外部判断依据,并作为「已征询 GPT」的留痕。 + +## 元信息 + +- 模型:ChatGPT 网页版(账号 meiya1,免费版)。⚠️ 页面未直接暴露模型标识,故此处不写具体版本号,避免当成事实。 +- 页面:https://chatgpt.com/ ,对话标题「热点选题产品设计」 +- 对话链接:https://chatgpt.com/c/6acb4e4a-a44c-83e8-9d46-90c0738861a4 +- 提问时间:2026-10-11 +- 提问稿:见同目录 `GPT提问稿.md`(发送前已落盘留痕) +- 抓取方式:本机独立 Chrome(127.0.0.1:9223)+ browser-harness,取主区域文本;表格按 DOM 还原为 Markdown +- 回复字数:15328 字符 + +--- + +## 一、发给 GPT 的提问(原文,同 `GPT提问稿.md`) + +# GPT 提问稿(热点与选题板块的细节) + +> 用途:向外部模型(ChatGPT 网页版)征询「选题板块」的功能细节,用于把产品框图从「只有板块名」补成「照着能做出来」。 +> 发送边界:只发产品层内容(板块结构、下列问题、现状描述、要它判断什么)。不含仓库路径、不含开发机制、不含源码、不含团队内部实现细节。 +> 留痕:本稿与回复各自落盘,回复逐字保留。 + +--- + +## 一、请你判断的背景(产品现状) + +我们正在设计一个「AI 内容工作台」,面向**跨平台短视频矩阵运营**:一个运营者管理人设(内容账号),每个内容账号在多个三方平台(微博/抖音/小红书/B站/知乎/头条)上有发布账号,日常工作是「找选题 → 写内容 → 发出去 → 看数据和收入」。 + +其中「找选题」落在产品的一个页面(选题雷达),这一页现在有 4 块: + +1. **对标监控概览** —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数。 +2. **对标内容** —— 列出被监控对标账号的内容,每条标一个「相对该号平时水平的倍数」。 +3. **评论区洞察** —— 从一条内容的评论区里,把反复出现的问题挑成候选选题。 +4. **选题库** —— 收纳「对选题有帮助的任何信息」,用**进度 × 类型**两个维度分类: + - 进度:待做/在写/已用 + - 类型:选题/对标线索/评论洞察/数据异动/灵感(每类自带后续动作) + +**当前的短板**:这一页只盯「对标账号在发什么」,**没有「平台热榜」这一路输入**(用户每天刷的微博热搜、抖音热榜、知乎热榜等,产品里没有入口);而且上面那个「倍数」目前是个展示值,没有说清怎么算出来;也没有一套「这条热点值不值得做」的判断口径。 + +我们已经有一个对标产品(开源项目 Easel)的参考做法:它有一个「热点雷达」,把六个平台的热榜拉回来,每条挂两个按钮(收藏到选题库/做内容);它另有一套**七维评分**(流量潜力、账号匹配、竞争差异化、时效价值、变现潜力、制作成本、合规风险,每维 1-10 分,加权换算成百分制,≥70 做/50-69 改方向/<50 不做)。 + +--- + +## 二、请你回答的六个问题 + +**问题 1 · 热点的数据来源该有哪几路** +一个「热点输入」功能,应该接哪些平台、哪些类型的源?每类源怎么取(官方开放接口/第三方聚合/手工录入)?取不到的时候怎么降级?请给一个「数据来源清单该长什么样」的建议。 + +**问题 2 · 热点按什么分类** +热点进来之后,按什么维度分类?分几级?每一级谁来维护(系统自动/用户手动)?分类的目的是什么(筛选?派活?展示?)?请说清你建议的分类维度,以及为什么是这几个。 + +**问题 3 · 热度怎么体现** +「热度」用什么量来表达?原始热度值(各平台不一样)怎么归一化到能互相比较?用什么窗口、什么阈值把热点分成「值得做/可考虑/不建议」?请给出可计算的算法,而不只是「要显示热度」。 + +**问题 4 · 这些细节在界面上怎么展示** +上面三件事(来源、分类、热度)在界面上怎么摆?列表/卡片/榜单?怎么排序?一屏放多少条信息合适?请描述你建议的界面结构与信息密度。 + +**问题 5 · 一个「选题板块」要具备哪些细节才算不是空架子** +一个能真正用的「热点 → 选题」板块,除了上面四问,还缺哪些细节?请列全,并说清每一项的作用。 + +**问题 6 · 评分/判断这一层怎么落进界面** +如果需要给热点或选题打分/做判断,这一层该不该显示给用户?显示分数、显示维度明细、还是只给一个结论(做/不做)?请给出你的判断依据。 + +--- + +## 三、回答要求 + +1. 按问题 1-6 顺序回答,标题用与上面一致的问题名。 +2. 每个答案要**具体到能执行**,不要只写「要有数据来源」「要有分类」这类话。 +3. 涉及数值(窗口、阈值、条数)时给出你建议的**具体数字**,并说明取值理由。 +4. 如果某个问题你有多个方案,请给出你的**首选方案**并说明为什么。 + + +--- + +## 二、GPT 的回复(逐字) + +# AI 内容工作台「选题雷达」产品设计评审 + +我的核心判断是:你现在缺的不是一个单独的「热点榜单」,而是一套从热点发现、价值判断、选题沉淀到内容生产的决策系统。 + +如果只是在现有「对标内容」旁边增加六个平台的热榜,产品会多出一批信息,但运营者依然要自己判断:哪个热点适合我的人设、哪个值得抢时间、哪个已经卷烂、哪个能带来涨粉或收入。 + +我建议把选题雷达设计成一个统一的工作流: + +多源发现 + +平台热榜 · 对标账号 · 评论区 · 自有数据 · 人工灵感 + +热点识别与价值判断 + +去重归并 · 热度趋势 · 人设匹配 · 时效 · 成本 · 风险 + +选题决策 + +建议做 · 改角度 · 持续观察 · 不建议做 + +进入内容生产 + +选人设与发布平台 → 生成内容 Brief → 写作 / 剪辑 → 发布 → 回收效果 + +先明确三个产品原则: + +- 热点和选题不是同一个对象。「某明星宣布结婚」是热点;「从明星官宣分析品牌联名传播」才是选题。一个热点可以生成多个选题,一个选题也可以关联多个热点。 +- 热度和价值不是同一个分数。 热度高,不代表适合你的账号;热度一般,也可能是非常好的垂直选题。 +- 信息采集与决策必须分层。 采集层解决「发生了什么」,决策层解决「要不要做」,工作流层解决「谁来做、怎么做、结果如何」。 + +以下按照六个问题逐项给出可实施的方案。涉及平台接口的部分,我会区分产品设计建议与实际接入能力,避免把理论上可采集误认为平台已经开放了稳定的接口。 + +## 问题 1 · 热点的数据来源该有哪几路 + +### 1.1 首选:五路输入,而不是只接六个平台热榜 + +我建议把数据来源分成五类。六个平台是其中的外部热点源,不应把所有输入都做成六个平级入口。 + +| 来源类型 | 具体数据 | 主要作用 | 优先级 | +| --- | --- | --- | --- | +| 平台热榜 | 微博热搜、抖音热点词、抖音热门视频、知乎热榜、头条热榜、小红书趋势 | 发现平台正在讨论什么 | P0 | +| 对标账号 | 对标账号新发布的内容、异常高表现内容、账号更新频率 | 发现同赛道正在验证的内容 | P0 | +| 评论与搜索需求 | 高频评论问题、搜索联想词、知乎问题、用户反复追问 | 发现真实需求与内容缺口 | P0 | +| 自有账号数据 | 自己发布内容的播放、互动、涨粉、转化、收入 | 发现已验证的选题模式 | P1 | +| 人工输入与外部信号 | 运营手动录入、行业新闻、节日节点、客户需求、内部灵感 | 补充机器采集不到的信息 | P1 | + +为什么这样分? 因为热点有三种本质不同的信号: + +- 注意力信号:大家现在关注什么。 +- 需求信号:大家真正想知道什么。 +- 验证信号:什么内容已经被证明能为特定账号带来结果。 + +平台热榜主要解决第一种;评论、搜索和对标内容解决第二种;自有账号数据解决第三种。把三者融合,才有机会形成差异化。 + +### 1.2 六个平台具体怎么接 + +以下是首选接入策略。它是产品实施优先级,不代表所有平台都允许任意应用直接读取全部热榜。 + +| 平台 | 优先获取的数据 | 首选方式 | 取不到时的降级 | +| --- | --- | --- | --- | +| 微博 | 热搜词、榜单排名、热度或趋势数据、原文链接 | 先核实开放平台可申请的搜索和热词能力;补充经授权的数据服务 | 手动粘贴热搜词、链接;保留原始榜单截图 | +| 抖音 | 实时热点词、上升词、热门视频及关联视频 | 官方开放平台 API,申请对应权限 | 经许可的第三方数据服务;手动录入 | +| 小红书 | 热搜词、趋势关键词、相关笔记、笔记互动信息 | 先核实官方开放平台具体授权范围;必要时对接合规数据服务 | 手动输入关键词或笔记链接;记录采集时间 | +| B站 | 热门视频榜、分区榜、视频信息及互动数据 | 官方可用接口与授权数据能力;核实具体榜单权限 | 手动添加热门视频链接;定时导入榜单 | +| 知乎 | 热榜问题、问题标题、热度及回答情况 | 官方知乎数据开放平台的热榜 API 或 Skill | 手动录入问题链接;从已获授权的搜索结果中发现线索 | +| 今日头条 | 热榜新闻、热点关键词、原文链接 | 核实官方可用的数据授权;优先使用有明确授权的数据服务 | 手动导入热点列表;使用合法可用的公开信息源补充 | + +这里有几个已经可以确认的接入依据: + +- 抖音开放平台提供实时热点词和上升词接口,相关能力需要申请 hotsearch 权限;文档注明热点榜约每两个小时刷新一次。 抖音开放平台 +1 +- 抖音另有热门视频榜接口,但它属于离线统计数据,统计最近 24 小时,数据通常每天上午产出,因此不能把它当成实时热搜。 抖音开放平台 +- 知乎官方数据开放平台目前列有热榜 API、搜索 API 和相应 Skill,可作为优先验证的接入路径。 developer.zhihu.com +- 小红书开放平台的公开 API 文档包含账号授权等能力,但这不等于已经确认存在可直接获取完整站内热榜的公开接口。热榜权限需要单独核实。 小红书开放平台 + +微博和头条同样需要逐项核实目标数据的开放权限、调用额度、商业使用许可和稳定性。不要因为浏览器能打开一个榜单,就默认产品可以长期、稳定、合规地自动抓取。 + +### 1.3 数据接入应采用三级降级策略 + +L1:官方 API / 正式授权接口 + +自动拉取、定时更新、保留原始字段。可用时优先使用。 + +L2:经过许可的第三方聚合服务 + +用于补充官方没有提供的榜单,但必须验证数据授权、覆盖率、刷新频率、成本与服务稳定性。 + +L3:人工录入 / 链接导入 + +允许运营粘贴标题、链接或导入 CSV。无法确认的数据不填假热度,标记为「暂无数据」。 + +再加一条关键规则:来源故障不应该导致选题库不可用。 即使某个平台断流,已经收藏的热点、已有选题和生产任务都必须正常工作。 + +### 1.4 「数据来源清单」应该长什么样 + +不要把来源只设计成一排平台图标。应当有一个可以配置、监控和排障的「数据源管理」页面。 + +建议的数据源配置表: + +| 字段 | 示例 | 用途 | +| --- | --- | --- | +| 来源名称 | 抖音实时热点词 | 识别数据源 | +| 平台 | 抖音 | 按平台筛选 | +| 源类型 | 平台热榜 | 区分榜单、搜索、对标等 | +| 接入方式 | 官方 API | 评估稳定性与合规性 | +| 权限状态 | 已授权 / 待申请 / 已失效 | 明确可用条件 | +| 更新频率 | 每 2 小时 | 管理新鲜度 | +| 最近成功时间 | 16:00 | 排查断流 | +| 最近失败时间 / 原因 | 15:00 / 权限过期 | 诊断异常 | +| 数据覆盖率 | 最近 24 小时成功率 | 判断可靠性 | +| 数据字段 | 标题、排名、热度、链接 | 检查是否满足算法需求 | +| 使用限制 | 商业展示、留存期限等 | 约束数据使用 | +| 成本 / 配额 | 每日调用量、费用 | 控制运营成本 | + +其中,「数据覆盖率」要明确计算口径。例如: + +成功率=成功采集次数计划采集次数×100%\text{成功率}=\frac{\text{成功采集次数}}{\text{计划采集次数}}\times100\%成功率=计划采集次数成功采集次数​×100% + +首版可采用以下告警标准: + +- 成功率不低于 95%:正常。 +- 80%–95%:警告。 +- 低于 80%:异常,显示最近成功时间并暂停将其作为实时信号。 +- 超过 2 个预期更新周期没有新数据:标记「数据可能已过期」。 + +注意:这里的 95% 等是产品建议的监控阈值,不是平台服务承诺。 + +### 1.5 首版接入顺序 + +我会这样安排: + +- 先接入权限明确、能稳定返回结构化数据的来源,例如知乎热榜和抖音热点词。 +- 同时上线对标账号和评论洞察,复用已有能力。 +- 微博、小红书、B站和头条逐个完成权限验证后接入,不等待六个平台全部完成才上线。 +- 人工录入、链接导入和统一去重必须首版具备。 + +首版的成功标准不是「六个平台图标全部亮起」,而是每天能稳定发现、筛选并沉淀一批真实可用的候选选题。 + +## 问题 2 · 热点按什么分类 + +### 2.1 不要用一个分类字段解决所有问题 + +我建议采用 四层分类结构,把「内容是什么」「来自哪里」「适合谁做」「现在做到哪一步」分开管理。 + +| 层级 | 维度 | 示例 | 谁维护 | 目的 | +| --- | --- | --- | --- | --- | +| L1 | 内容领域 | 科技、商业、职场、教育、娱乐、生活、财经 | 系统 AI 初判,用户可改 | 过滤不相关热点 | +| L2 | 事件类型 | 突发事件、产品发布、政策变化、人物事件、争议话题、节日节点 | 系统 AI 初判,用户可改 | 选择内容切入方式 | +| L3 | 账号适配 | 适合哪些人设、内容账号和发布平台 | 系统推荐,用户确认 | 派发给正确的运营对象 | +| L4 | 工作状态 | 待判断、观察中、待制作、制作中、已发布、已放弃 | 系统与用户共同维护 | 推进生产、避免重复劳动 | + +这四层不能混在一起。 + +例如,「某 AI 模型发布」属于科技领域、产品发布事件,可以同时适配「AI 工具测评」和「职场效率」两个人设,最终分别生成两条角度不同的选题。 + +### 2.2 分类的维护规则 + +建议使用以下规则,减少 AI 乱打标签和人工维护负担。 + +- 领域:系统最多推荐 3 个标签,必须有 1 个主领域;置信度低于 0.7 时标记「待确认」。 +- 事件类型:每个热点只设 1 个主类型,最多 2 个辅助标签。 +- 账号适配:系统根据账号定位、历史表现、受众和变现目标推荐最多 3 个适配人设;用户可增删。 +- 工作状态:由工作流事件自动更新。例如从选题卡点击「开始制作」,状态变为「待制作」或直接创建生产任务;不能靠 AI 根据文字猜测状态。 +- 用户自定义标签:允许用户添加品牌、产品、地域、人物、活动等标签,但不让自定义标签取代系统基础分类。 + +不建议首版设计三级以上的固定行业树。行业树太深,维护成本高;AI 自动分类稍有偏差,用户就要花大量时间纠错。 + +### 2.3 还要有两个辅助维度 + +除了四层分类,还要有两个筛选维度,但不把它们混进分类树: + +- 来源平台:微博、抖音、小红书、B站、知乎、头条、对标账号、评论区、人工输入。 +- 热点生命周期:刚出现、快速上升、稳定发酵、开始衰退、已过期。 + +来源平台用于定位信息入口;生命周期用于判断是否还有创作窗口。 + +### 2.4 界面上怎么用这些分类 + +首屏不建议展开一棵庞大的分类树,而是用三个快速筛选区: + +- 领域:全部 / 科技 / 商业 / 职场 / 生活 / 娱乐 / 其他。 +- 适配人设:全部人设 / 当前人设 / 多账号可复用。 +- 阶段:刚出现 / 上升中 / 持续发酵 / 待制作。 + +更多事件类型、来源平台和工作状态放进「筛选」抽屉。 + +对于矩阵运营,最有价值的并不是让用户看到所有热点,而是默认优先展示「与当前人设相关、仍处于有效窗口、且还没有被团队处理」的热点。 + +## 问题 3 · 热度怎么体现 + +这是我认为整个方案中最需要认真设计的一层。 + +不要把平台原始热度值直接放在同一条榜单里比较,也不要把「热度」与「值得做」合并成一个数字。 + +抖音热度值、微博热搜排名、知乎热榜热度、B站播放量的含义不同。直接比较会产生错误结论。 + +### 3.1 建立三种分数 + +热度指数:0–100 + +这个话题在自己的平台上有多热,当前处于上升还是下降阶段。 + +选题价值分:0–100 + +它是否适合当前人设,能否形成差异化内容,制作成本与风险是否可接受。 + +时效状态 + +现在做是否来得及:立即行动、可排期、持续观察、已过期。 + +热度指数解决「值不值得关注」,选题价值分解决「值不值得做」,时效状态解决「现在做还是晚点做」。 + +### 3.2 原始热度如何归一化 + +先统一数据结构。每次采集都保留: + +- 平台、榜单类型、关键词或事件 ID。 +- 原始热度值、原始排名、原始榜单总数。 +- 采集时间、榜单更新时间。 +- 过去采集快照、来源可信度。 + +不同平台采用不同归一化方法。 + +情况 A:平台提供连续热度值。 + +例如某平台给出热度值 +𝑥 +x。先对同一平台、同一榜单类型、相同时间窗口的热度做对数变换,再映射到 0–100 的百分位: + +H=100×PercentileRank⁡(ln⁡(1+x))H=100\times\operatorname{PercentileRank}(\ln(1+x))H=100×PercentileRank(ln(1+x)) + +这里的百分位是该平台同一榜单内的相对位置,而不是全平台统一绝对热度。建议使用最近 30 天的历史样本计算分布,并用最近 7 天的样本做校准;样本不足时使用当前榜单横截面。 + +情况 B:平台只有排名。 + +例如某平台返回第 3 名,总榜有 50 条: + +H=100×(1−r−1N−1)H=100\times\left(1-\frac{r-1}{N-1}\right)H=100×(1−N−1r−1​) + +其中 +𝑟 +r 为排名, +𝑁 +N 为榜单条数。 + +此时第 1 名为 100 分,第 50 名为 0 分。这个分数表达榜内位置,不表示绝对流量。 + +情况 C:平台没有热度值和排名。 + +使用可观测指标,例如单位时间新增互动、播放增长、评论增长、搜索结果变化等。但只有在数据定义一致、采样稳定时才进行计算;否则标记为「热度未知」,不能为了显示一个数字而伪造可比性。 + +### 3.3 增加趋势:当前热度不够 + +单看当前榜位,容易错过刚刚上升的热点,也会误把已经衰退的老热点当成机会。 + +我建议采用 30 分钟为基础观察窗口,记录每次采集的热度指数 +𝐻 +𝑡 +H +t + ​ + +。 + +T30=Ht−Ht−30mT_{30}=H_t-H_{t-30m}T30​=Ht​−Ht−30m​ + +- 𝑇 30 > 0 T 30 ​ >0:热度上升。 +- 𝑇 30 ≈ 0 T 30 ​ ≈0:相对稳定。 +- 𝑇 30 < 0 T 30 ​ <0:热度下降。 + +为了避免单次波动造成误判,使用最近 3 个采样点的中位数或平滑后的值。对于每 2 小时才更新一次的来源,不要伪装成每 30 分钟都获取到了新的平台热度,应显示「趋势数据不足」或用实际可用快照计算。 + +另外,建议保留两个观察窗口: + +- 30 分钟:捕捉快速上升的热点。 +- 24 小时:识别持续发酵的话题,避免只追瞬时波动。 + +对榜单更新较慢的平台,刷新频率由实际数据源决定。 + +### 3.4 怎么把热点划分为三档 + +首版先采用可解释的规则,而不是训练复杂预测模型。 + +| 档位 | 初始规则 | 产品动作 | +| --- | --- | --- | +| 值得关注 | 热度指数 ≥ 70,或最近 30 分钟上升 ≥ 15 分,且来源新鲜 | 优先评估选题价值 | +| 可考虑 | 热度指数 40–69,或热度较高但趋势数据不足 | 结合人设、差异化与时效判断 | +| 不建议追热点 | 热度指数低于 40、持续下降且无长期价值,或已过期 | 默认降级展示,不进入优先队列 | + +以上是首版建议阈值,后续应根据真实数据校准。不能将「不建议追热点」等同于「这个话题没有内容价值」:有些长尾知识问题本来就不需要热榜高分。 + +我建议再加入一条硬规则:数据过期的热点不得显示为「值得关注」,即使上次采集的热度很高。 默认过期阈值可先设为超过 2 个预期更新周期,或者超过 6 小时没有新快照;新闻类突发热点可设置更严格的时效。 + +### 3.5 如何计算「热点值得做」的最终价值分 + +借鉴你提到的 Easel 七维评分,但需要改成适配矩阵运营的口径。 + +| 维度 | 权重 | 评估内容 | +| --- | --- | --- | +| 账号匹配度 | 25% | 是否符合人设定位、受众和内容承诺 | +| 需求与流量潜力 | 20% | 热度、增长趋势、用户问题强度 | +| 差异化空间 | 15% | 是否有新的观点、角度或信息增量 | +| 时效价值 | 15% | 现在制作是否还赶得上有效窗口 | +| 变现或增长价值 | 10% | 是否有助于涨粉、转化或收入 | +| 制作可行性 | 10% | 是否能在所需时间内完成,成本是否合理 | +| 合规与声誉风险 | 5% | 是否涉及版权、隐私、未证实信息或高风险表达 | + +各维度先按 1–10 分评分,最后加权转换为百分制: + +V=10∑i=17wisiV=10\sum_{i=1}^{7}w_i s_iV=10i=1∑7​wi​si​ + +其中 +𝑤 +𝑖 +w +i + ​ + + 是权重的小数形式,权重之和为 1, +𝑠 +𝑖 +s +i + ​ + + 为各维度 1–10 分。 + +评分越高越好,因此合规与声誉风险这一维必须反向评分:风险越低,分数越高。对于明确不允许发布的内容,不能通过其他维度的高分抵消,应直接触发风险拦截。 + +首版建议的决策阈值: + +- 70–100 分:建议做,且没有硬性风险拦截。 +- 50–69 分:建议改角度或补充信息。 +- 低于 50 分:不建议投入制作资源。 + +还应加入数据完整性要求:七个维度至少六个有可靠依据才允许生成正式价值分;账号匹配度、时效价值、风险三个关键维度必须有评分。否则显示「待评估」,不能把缺失数据默认为中等分。 + +### 3.6 让「相对平时水平的倍数」变得可解释 + +你现有对标内容上的「倍数」,应与热榜热度指数彻底分开。 + +如果比较的是某条对标视频的播放量,可以定义: + +M=该内容当前播放量该账号同类型内容的基准播放量M=\frac{\text{该内容当前播放量}} +{\text{该账号同类型内容的基准播放量}}M=该账号同类型内容的基准播放量该内容当前播放量​ + +基准值建议使用该账号最近 30 天内、同内容类型的有效样本中位数,至少需要 10 条有效样本。样本不足时显示「样本不足」,不要强行给出倍数。 + +如果播放量拿不到,也可以用互动率或评论数作为独立指标,但必须注明比较口径,不能将不同指标混成一个「爆款倍数」。 + +例如: + +- 播放量为基准的 2.4 倍:显示「播放表现 2.4×」。 +- 互动率为基准的 1.6 倍:显示「互动表现 1.6×」。 +- 样本不足:显示「暂无可靠基准」。 + +这样用户才知道这个倍数究竟代表什么。 + +## 问题 4 · 这些细节在界面上怎么展示 + +### 4.1 首选布局:工作台,而不是六个平台的榜单拼盘 + +建议保留现有「选题雷达」页面,增加「热点发现」作为首屏主视图,把对标内容、评论区洞察保留为其他输入视图。 + +整体结构如下: + +## 选题雷达 + +发现热点,判断价值,推进选题 + +数据正常 5/6 + +今日热点 + +# 128 + +值得关注 + +# 18 + +待评估 + +# 32 + +热点发现 + +对标内容 + +评论洞察 + +选题库 + +热点发现 + +按综合优先级 + +全部平台全部领域当前人设近 24 小时 + +## 86 + +热度 + +示例:AI 工具发布新功能 + +抖音 · 科技 · 12 分钟前更新 + +快速上升匹配当前人设 + +建议角度:普通用户如何用它完成一项具体任务。 + +价值分 82 · 评估置信度高 + +加入选题库 + +生成选题 + +## 71 + +热度 + +示例:职场人讨论远程办公 + +知乎 · 职场 · 1 小时前更新 + +持续发酵长尾价值 + +建议角度:远程办公效率问题的实际解决方案。 + +价值分 74 · 评估置信度中 + +以上为结构示意,数字和事件均为虚构示例,不代表实时平台数据。 + +这张结构示意有几个重点: + +- 顶部数字用于判断整体工作量,不是用来替代热点列表。 +- 主区域以热点列表为核心,优先显示可行动的信息。 +- 每条热点同时显示热度、趋势、适配程度和下一步操作。 +- 不把七维评分全部铺在列表中,详细依据放在详情抽屉。 + +### 4.2 列表、卡片还是榜单? + +我的首选是桌面端表格化列表 + 右侧详情抽屉。 + +原因是运营者需要高频比较、批量处理、筛选和派发,不只是阅读内容。 + +| 组件 | 推荐形式 | 设计理由 | +| --- | --- | --- | +| 顶部概览 | 3–4 个统计指标 | 了解热点池规模、待处理量和数据状态 | +| 平台入口 | 横向 Tab 或多选筛选器 | 快速切换来源,而非拆成六个孤立页面 | +| 热点列表 | 表格化列表 | 方便排序、批量收藏、批量忽略 | +| 热点详情 | 右侧抽屉 | 不离开列表就能查看证据、评分、相关内容 | +| 选题候选 | 独立选题卡片 | 强调创作角度、目标人设和生产动作 | +| 选题库 | 列表 + 可切换看板 | 支持检索、状态管理和批量操作 | + +纯卡片瀑布流更适合视觉灵感和图片视频素材浏览;纯榜单适合看名次,却不适合跨平台决策。可以允许用户切换视图,但默认视图应服务于运营效率。 + +### 4.3 每条热点到底显示什么? + +首屏建议控制在 7 个信息组,不要把所有原始数据一次性展示。 + +① 热点主体 + +标题、事件摘要、关键词、原始内容链接。 + +② 来源与新鲜度 + +平台、榜单类型、排名、最后采集时间。 + +③ 热度与趋势 + +热度指数、上升/稳定/下降、趋势观察窗口。 + +④ 分类与适配 + +领域、事件类型、推荐人设。 + +⑤ 决策结果 + +建议做、改角度、观察、不建议做;可显示价值分。 + +⑥ 推荐切入角度 + +一句话说明为什么适合该人设,以及建议从什么角度做。 + +⑦ 下一步操作 + +加入选题库、生成选题、观察、忽略。 + +这里有一个很重要的交互细节:「收藏热点」和「生成选题」必须是两个不同的动作。 + +- 收藏热点:保留原始事件,稍后再评估。 +- 生成选题:创建一条有明确创作角度、目标人设和内容形式的选题记录。 +- 直接制作:创建选题并进入内容生产流程,但仍允许用户确认后执行。 + +如果只有「收藏」和「做内容」两个按钮,用户很难表达「有价值,但我还没有想好怎么做」。 + +### 4.4 一屏放多少条合适? + +桌面端建议: + +- 首屏 8–12 条完整热点记录。 +- 单条行高约 88–120 px,按是否展示摘要和建议角度调整。 +- 默认每页 20 条,提供 20 / 50 / 100 条分页选择。 +- 左侧筛选区域约占 200–240 px;中间列表约占可用宽度的 60%–70%;详情抽屉宽约 400–480 px。 +- 列表默认不展示全部七维评分,只展示热度、趋势、建议和关键风险。 +- 选中热点后,在右侧查看详细评分依据、原始链接和相关内容。 + +这里的尺寸是桌面端初始设计建议,应通过实际原型测试调整。不要为了追求一屏展示更多而把每条记录压缩成只有标题和一个分数。 + +### 4.5 默认排序应该怎么做? + +我不建议默认按平台榜单排名,也不建议简单地按热度从高到低。 + +首选排序是行动优先级: + +- 有效、可信、正在快速上升,且适配当前人设的热点。 +- 热度高、价值分高,但趋势较稳定的热点。 +- 热度中等、需求明确、具有差异化空间的长尾选题。 +- 观察中、数据不足或与当前人设关联较弱的热点。 +- 已过期、已忽略、已生成选题的热点。 + +列表内再按时效紧迫度、价值分和更新时间排序。 + +同时保留「按热度」「按上升速度」「按最新」「按价值分」四种排序,满足不同工作习惯。 + +## 问题 5 · 一个「选题板块」要具备哪些细节才算不是空架子 + +我会把这一问题拆成 8 个能力模块。前四个解决发现和判断,后四个解决真正的工作流闭环。 + +### 5.1 必须具备的八个模块 + +| 模块 | 必须具备的细节 | 解决什么问题 | +| --- | --- | --- | +| 1. 数据采集 | 来源管理、更新频率、失败重试、采集时间、原始链接、数据质量状态 | 保证热点不是过期数据或虚假数据 | +| 2. 事件去重 | 标题相似度、关键词匹配、事件归并、跨平台关联 | 避免同一热点重复占据列表 | +| 3. 热度与趋势 | 当前热度、排名变化、历史快照、趋势图、过期判定 | 判断现在是不是合适的创作窗口 | +| 4. 价值判断 | 人设匹配、差异化、时效、成本、变现、风险及证据 | 帮用户决定做不做 | +| 5. 选题生成 | 多角度建议、标题草案、核心观点、目标受众、内容形式 | 将热点转成真正可生产的选题 | +| 6. 选题库管理 | 收藏、状态、负责人、截止时间、标签、关联热点、去重、搜索 | 避免选题只收藏不处理 | +| 7. 内容生产衔接 | 目标人设、发布平台、内容 Brief、写作/脚本/素材入口 | 将选题推进到制作 | +| 8. 效果回收 | 发布记录、播放互动、涨粉、转化、收入、复盘与评分校准 | 验证哪些判断真的有效 | + +### 5.2 选题与热点必须分成两种数据对象 + +这是我最建议你在数据模型阶段就确定的事情。 + +热点事件 Hotspot + +原始标题、事件描述、来源平台、原始链接、热度快照、生命周期、事件 ID。 + +例:某 AI 产品发布新功能。 + +选题 Topic + +创作角度、目标人设、目标受众、内容形式、核心观点、差异化、价值分、生产状态。 + +例:用这个功能完成一个真实工作任务,并与旧方法比较。 + +关系建议采用多对多: + +- 一个热点可以生成多个选题。 +- 一个选题可以关联多个热点、评论洞察或对标内容。 +- 一个选题可以指定一个主要人设,同时关联多个目标发布平台。 +- 同一个选题可以派发给不同内容账号,但需要明确它们是同一内容的跨平台适配,还是不同角度的独立内容。 + +这个模型可以避免「收藏了一个热点就算选题」的问题。 + +### 5.3 选题生成必须有结构化 Brief + +不要只让 AI 输出十个标题。标题只是创作的入口,不是一个可执行的生产任务。 + +建议每次生成选题时,至少输出以下字段: + +| 字段 | 示例 | +| --- | --- | +| 选题名称 | 这个 AI 功能能否节省日常工作时间? | +| 目标人设 | AI 工具测评 | +| 目标受众 | 想提高办公效率的职场人 | +| 核心问题 | 该功能解决什么实际问题? | +| 切入角度 | 用真实任务验证,而不是复述发布新闻 | +| 核心观点 | 能节省某些步骤,但仍需人工核对结果 | +| 内容形式 | 短视频 / 图文 / 深度回答 | +| 开头钩子 | 一个具体的工作痛点或实验结果 | +| 结构提纲 | 痛点 → 演示 → 结果 → 局限 → 结论 | +| 证据与素材 | 官方说明、可验证的演示、原始热点链接 | +| 制作成本 | 预计耗时、素材准备、是否需要出镜 | +| 风险提示 | 功能是否真实可用、是否有未经证实的效果宣称 | +| 成功指标 | 完播率、收藏率、涨粉、点击或转化 | + +其中,AI 可以先填充全部字段,但必须标出待核实信息。没有证据的内容不能伪装成事实。 + +### 5.4 选题库的「进度 × 类型」怎么升级 + +你现有的「待做 / 在写 / 已用」与五种类型是个不错的起点,但对完整工作流而言,状态过于粗糙。 + +建议进度改为: + +| 状态 | 进入条件 | 下一步动作 | +| --- | --- | --- | +| 待评估 | 刚收集,尚未决定是否制作 | 评估价值 | +| 待制作 | 已确认选题,有基本 Brief | 分配负责人、确认平台 | +| 制作中 | 已创建写作或制作任务 | 继续写作、剪辑 | +| 待发布 | 内容已完成,等待检查或排期 | 审核、发布 | +| 已发布 | 已有实际发布记录 | 绑定数据并复盘 | +| 已归档 | 放弃、过期或完成复盘 | 查看历史、恢复使用 | + +原来的「类型」保留为独立标签: + +- 选题 +- 对标线索 +- 评论洞察 +- 数据异动 +- 灵感 + +热点事件可以作为第六类输入记录,也可以直接保留在独立的热点池中;我更倾向于后者,因为热点有独立的热度和生命周期,不宜与普通灵感使用完全相同的管理方式。 + +另外,建议增加三个字段: + +- 负责人:谁负责推进。 +- 截止时间:什么时候必须完成。 +- 目标人设与发布平台:谁来做、发到哪里。 + +这三个字段比增加更多分类标签更能提升实际运营效率。 + +### 5.5 必须设计事件去重与关联 + +例如,同一个事件同时出现在微博、抖音和知乎。 + +产品不应该默认展示三条互不相关的记录,而应该形成一个「热点事件」: + +- 热点事件标题:AI 产品发布新功能。 +- 来源:微博、抖音、知乎。 +- 跨平台表现:各平台分别显示排名、热度、趋势。 +- 关联内容:对标视频、相关评论、知乎问题。 +- 推荐选题:教程、体验评测、行业分析。 + +但要注意:去重不等于合并所有数据。 各个平台的热度必须保留独立记录,不能把微博热度和抖音热度直接相加。 + +建议先用标题相似度、关键词和时间窗口做候选归并,再由 AI 判断是否同一事件。对于低置信度的归并,让用户确认。 + +### 5.6 让热点与账号定位真正关联 + +矩阵运营最大的优势是同一事件可以被多个账号从不同角度利用。 + +例如,同一个科技热点可以生成: + +- AI 工具测评人设:实测功能、优缺点。 +- 职场效率人设:能否解决具体工作问题。 +- 商业观察人设:产品策略和市场竞争。 +- 新手教程人设:一步一步教用户使用。 + +因此,热点详情页必须有一个「适配人设」区域,至少显示: + +- 推荐人设。 +- 推荐理由。 +- 建议内容角度。 +- 建议发布平台。 +- 预计制作成本。 +- 是否与已有选题重复。 + +不能只根据关键词匹配人设。例如「AI」并不意味着所有 AI 相关热点都适合每一个科技账号。 + +### 5.7 建立发布后的反馈闭环 + +这是容易被忽略,但长期最有价值的模块。 + +每条已发布内容应当关联回原始选题和热点,并记录: + +- 发布平台、发布时间、内容链接。 +- 发布后 2 小时、24 小时、7 天的可用表现数据。 +- 播放量、互动率、收藏率、涨粉、转化和收入。 +- 与该账号同类型内容的历史基准比较。 +- 实际结果与预估结果的偏差。 + +并不是所有平台都能提供全部指标,系统应根据实际授权情况记录可用字段。 + +有了这些数据,产品才能逐渐回答:哪些热点值得做、哪些人设适合做、哪些切入角度有效,以及哪些热点虽然很热却不值得投入制作资源。 + +### 5.8 需要补齐的运营保障 + +最后还有四项容易被低估的基础能力: + +- 操作审计:记录谁收藏、修改评分、放弃选题、发布内容。 +- 权限控制:区分团队、工作空间、内容账号的查看和编辑权限。 +- 异常提醒:来源断流、热点即将过期、任务逾期、内容重复。 +- 数据可追溯:每个热度、评分、推荐理由都能回到原始证据。 + +尤其是 AI 自动推荐的理由,不能只保存一句生成文本。最好同时保存使用了哪些信号、对应哪些原始数据,以及评分模型的版本,方便之后解释和复盘。 + +## 问题 6 · 评分/判断这一层怎么落进界面 + +我的判断是:要显示评分,但不要让分数成为用户做决策的唯一依据。采用「结论优先、分数辅助、维度可展开、证据可追溯」的四层设计。 + +这比只显示「做 / 不做」更可信,也比默认展开七维雷达图更适合高频运营工作。 + +### 6.1 为什么不应该只显示结论? + +假设系统给出两条建议: + +- 热点 A:建议做,价值分 82。 +- 热点 B:建议做,价值分 82。 + +如果只显示结论或分数,用户不知道这两个判断有什么区别。 + +A 可能是因为账号匹配度高、热点正在上升;B 可能是因为变现潜力高,但时效性一般。运营者采取的行动应该不同。 + +所以,我建议在列表中显示结论与分数,在详情中显示维度明细和证据。 + +### 6.2 四层展示结构 + +第一层 · 列表默认展示 + +AI 工具发布新功能 + +建议做 + +# 82 + +/100 + +选题价值 + +推荐角度:真实任务实测 + +理由:人设匹配高、热度上升、制作成本可控 + +第二层 · 详情页评分明细 + +账号匹配度 + +9/10 + +需求与流量潜力 + +8/10 + +差异化空间 + +7/10 + +时效价值 + +9/10 + +变现或增长价值 + +7/10 + +制作可行性 + +8/10 + +合规与声誉风险 + +8/10 + +示例评分,仅用于展示交互结构。 + +第三层 · 判断依据 + +为什么推荐? + +适配当前人设 + +历史上,工具实测类内容与该人设定位一致。 + +仍有创作窗口 + +最近观测到热度上升;需根据实际采集时间判断。 + +需要验证 + +发布前核实功能是否已开放,以及演示结果是否可复现。 + +第四层 · 用户决策 + +系统给出建议,但最终决定权属于运营者。 + +接受建议 + +调整方向 + +稍后观察 + +不做并记录原因 + +### 6.3 哪些信息应该显示,哪些不应该? + +| 信息 | 列表 | 详情 | 设计判断 | +| --- | --- | --- | --- | +| 做 / 改方向 / 观察 / 不建议做 | 必须 | 必须 | 用户首先需要行动结论 | +| 选题价值分 | 建议显示 | 必须 | 便于快速比较 | +| 热度指数及趋势 | 必须 | 必须 | 与价值分分开显示 | +| 七维评分明细 | 不默认显示 | 必须 | 详情按需展开 | +| 每个维度的理由 | 显示 1–2 条关键理由 | 必须 | 避免黑盒决策 | +| 原始数据与来源 | 显示来源和更新时间 | 必须 | 方便核实事实 | +| 评分置信度 | 显示高 / 中 / 低 | 显示依据 | 防止把估计当成事实 | +| 人工修改评分 | 不显示编辑控件 | 允许调整 | 保留人工判断 | +| 历史评分变化 | 不显示 | 可查看 | 用于复盘与模型迭代 | + +我不建议首屏默认展示雷达图。七维雷达图可以作为详情页中的辅助可视化,但它不如明确的结论、评分理由和风险提示直接。 + +### 6.4 必须把「置信度」和「价值分」分开 + +这两个概念很容易混淆。 + +- 价值分 85、置信度低:系统认为值得做,但缺少足够证据,用户应先核实。 +- 价值分 65、置信度高:系统有充分证据判断它的价值一般,用户可以考虑改角度。 +- 价值分 90、存在高风险:不应该因为分数高就自动进入生产。 + +置信度可以根据数据完整性、来源可靠性、历史样本量和评分依据的充分程度综合确定。首版可以使用高 / 中 / 低三级,并在详情中说明原因。 + +不建议把置信度简单等同于 AI 自己声称的「我有多确定」。它应当由可检查的数据条件决定。 + +### 6.5 评分系统需要允许用户纠正 + +产品上线后,用户会不断发现系统判断与实际运营经验不一致的地方。因此需要支持: + +- 修改单个维度的分数。 +- 覆盖系统建议,例如「不做」「改方向」「先观察」。 +- 记录修改原因。 +- 将人工决定与最终发布效果关联。 +- 查看系统推荐和人工决策的历史差异。 + +不过,人工修改后的分数应标记为「人工调整」,不要悄悄覆盖原始 AI 评分。否则后续无法分析模型究竟哪里判断不准。 + +建议先以规则加 AI 辅助评分的方式上线,积累足够的真实发布结果后,再逐步校准权重,而不是一开始就把七维分数当成经过验证的预测模型。 + +## 最终建议:先做什么,后做什么 + +如果我是这个产品的负责人,我会按照以下顺序安排开发,而不是六个平台、七维评分、选题库和内容生成同时开工。 + +## P0 + +第一阶段:先建立热点到选题的闭环 + +建议优先完成,作为首版的核心范围。 + +- 接入至少 2 个可稳定获取的热点来源,并保留人工导入。 +- 建立统一热点数据模型、来源状态和跨平台去重。 +- 展示热度、趋势、更新时间与数据质量。 +- 实现选题价值评分、推荐理由和风险拦截。 +- 支持「收藏热点 → 生成选题 → 创建生产任务」。 +- 选题库具备状态、负责人、截止时间和关联来源。 + +## P1 + +第二阶段:让矩阵运营产生优势 + +- 按人设推荐不同创作角度。 +- 将热点与对标内容、评论洞察和自有账号数据关联。 +- 支持多平台内容适配和批量选题。 +- 建立发布效果回收及人工反馈机制。 + +## P2 + +第三阶段:持续优化判断能力 + +- 根据真实表现校准评分权重。 +- 预测热点衰退时间和制作窗口。 +- 推荐更有差异化的创作角度。 +- 根据账号历史结果形成个性化选题排序。 + +### 最后,我认为有三个产品决策尤其重要 + +第一,选题雷达的主视图应该是「可行动的热点」,而不是原始榜单。 榜单只是原材料,产品真正要交付的是经过筛选、有依据、能进入生产的候选选题。 + +第二,热度、选题价值、时效与置信度必须独立表达。 它们回答不同问题,不要为了界面简洁而压缩成一个无法解释的总分。 + +第三,矩阵运营的核心差异化应该是「同一个热点,能否针对不同人设产生不同的高价值选题」。 如果只是把六个平台的榜单聚合到一起,很容易被其他工具替代;如果能结合账号定位、历史表现、用户需求、制作成本和发布反馈形成决策闭环,才真正构成 AI 内容工作台的核心价值。 diff --git a/docs/pm/mcn-shortvideo-agent/专题/GPT建议-页面结构与操作路径.md b/docs/pm/mcn-shortvideo-agent/专题/GPT建议-页面结构与操作路径.md new file mode 100644 index 0000000..9e7ff47 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/GPT建议-页面结构与操作路径.md @@ -0,0 +1,1425 @@ +# GPT 对页面结构与操作路径的建议(目标 · 第 1 棒) + +> 目标:征询 GPT 对当前七页结构与操作路径的建议。用户口径逐字:「问 gpt 对现在的 产品页面结构 操作路径 有什么建议」。 +> 执行会话:`[执行]-[产品规划]-征询GPT对七页结构与操作路径的建议` | 域目录 `执行会话`(已抢到域锁)| 产物落在目标目录内。 +> 时间:2026-10-09 16:18 – 16:35(GMT+8) +> 只读输入:最新一版 `2a-产品功能-新版.md`、`2b-界面布局-新版.md`(七页)、原型 `ui/mcn-workbench.html`(V3);上一轮 `GPT-规划意见与采纳决策.md`(⛔ 同一批规划问题本轮不再问)。 +> 🔴 本轮问的是**页面结构与操作路径**这一层,不是上一轮的规划层问题。 + +--- + +## 〇、一屏结论 + +- 现状说明已整理成**可直接外发的材料**(`现状说明-七页结构与操作路径.md`)。只写结构与路径,不含商业数据、账号信息、内部代号、文件路径。 +- 材料已发给 ChatGPT 网页版,**硬证据=发送后回读输入框长度归零**(读到 1)。回复原文 **10562 字符**已逐字留痕(见 §二),不是概括、不是转述。 +- GPT 的主线判断:**七页骨架合理,不建议推倒重来**;最值得改的是**页面之间的职责边界**,以及**同一条内容在各工作区之间的连续性**。 +- 它给了 9 个问题(P0 两个/P1 四个/P2 三个)+ 七页板块重划 + 目标操作路径 + 跳转消除清单,拆成 **32 条**逐条过账:**采纳 15 条、部分采纳 8 条、已在 3 条、不采纳 1 条、待拍板 5 条**(§四 列了这 5 个待拍板事项)。 +- 🔴 最要紧的一处冲突:它主张**把「记录与对账」从复盘页拆出去**,而用户 **2026-10-09 刚拍板把它整页并入复盘**。方向相反,**⛔ 不自行改**,已单列待拍板 D1。 + +--- + +## 一、给 GPT 的提问包(原文,逐字) + +发给 ChatGPT 的原文如下,逐字未改(发送时间约 2026-10-09 16:26 GMT+8)。按技能规定:没给本机路径、没写「见某文件」,全部内容内联。 + +```text +你是资深产品架构与交互顾问。下面是一份内容生产工具(面向内容团队,多账号批量做短视频内容、多平台分发、数据复盘)的现状说明,包含它的信息架构(有哪几页、每页有哪些板块)与操作动线(用户做一条内容实际经过哪几页、每页做什么、哪里要来回跳)。 + +请你**只针对页面结构与操作路径**这一层给建议:结构怎么切、动线怎么走才顺手。不要谈配色、字体、控件样式这类视觉实现,也不要谈商业与运营策略。 + +以下是现状说明: + +## 一、这是什么 + +一个给**内容团队**用的内容生产与运营工作台。他们在里面批量做短视频内容、往多个账号多个平台分发、再把数据读回来复盘。 + +用的人有三类:**内容负责人**(定方向、看整体)、**编导与文案**(找选题、写稿)、**剪辑与投放**(成稿后发布、盯效果)。 + +它是天天进来干活的工具,不是给第一次来的访客看的产品介绍页。每一页都有人在里面完成一件事。 + +--- + +## 二、导航与页面总览 + +左侧导航是**一层七项**,一项一页。没有分组、没有第二层。 + +1. **首页** —— 矩阵总览 +2. **选题** —— 选题雷达 +3. **创作** —— 创作台 +4. **投放** —— 发布中心 +5. **复盘** —— 复盘台 +6. **账号** —— 账号画像 +7. **资产** —— 资产库 + +另外有一个**全局可达**的入口「随手记」:在任意页面一次点击就能碰到,不占任何一页的板块位。 + +--- + +## 三、七页各有哪些板块(从上到下) + +### 首页(矩阵总览) +一屏回答每个账号今天该发什么、发了什么、效果如何。 + +- 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +- 账号矩阵 —— 每个账号今日该发什么/已发什么/效果如何 +- 异常值提示 —— 最近哪些内容的数据异动 +- 本月表现最好的一条 +- 全局检索 + +另有一行页级数据摘要:在管账号数/今日待处理数/数据异动数/本月已发数。 + +### 选题(选题雷达) +找选题,并把选中的那条推进下一步。 + +- 对标监控概览 —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数 +- 对标内容 —— 每条带它相对该账号平时水平的倍数 +- 评论区洞察 —— 取评论,出候选选题 +- 选题库 —— 分「待做/在写/已用」三组 +- 灵感速记 +- (页级还有「开始创作」这类跳去创作的动作入口) + +### 资产(资产库) +把爆款的写法拆开存下来,下次能直接拿到。 + +- 分区切换 —— 角度/结构/开场白/标题,一次看一个 +- 资产条目 —— 当前分区下的条目 +- 单条详情 —— 原文、出处、草稿标记 +- 引用入口 —— 把这条拿去创作台用 + +### 创作(创作台) +一条内容从选题走到成稿,再从成稿展开成多账号多平台的版本。 + +- 创作流程 —— 七个环节的当前位置,可回退 +- 当前环节工作区 —— 这一步实际干活的地方 +- AI 产出与采纳 —— 当前环节的 AI 产出(生成中/已生成/失败重试)+ 采纳·驳回·改后再用 +- 资产引用 —— 从资产库拿角度、结构、开场白、标题 +- 版本管理 —— 一稿多版,含母版到多账号多平台的展开 +- 录制卡片与画板 —— 成稿之后把内容转成对着讲的卡片 + +另有页级「当前内容上下文」:表明当前是哪条选题、走到哪个环节。 + +### 投放(发布中心) +把成稿过来的版本过闸,由人确认发出。 + +- 目标选择 —— 这批版本发给哪些账号、哪些平台 +- 各版本与逐版编辑 —— 一个目标一版 +- 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +- 确认发布 —— 含二次确认 +- 发布记录 —— 这批发了什么,可查随发布记录一起留的检查结果 + +### 账号(账号画像) +每个账号一份画像与记忆,看和改都在这一页。 + +- 账号列表 —— 选一个账号 +- 画像六维 —— 定位、风格、受众、平台、偏好与红线、长期记忆 +- 记忆条目 —— 只追加,不覆盖 +- 关联内容 —— 这个账号做过的内容 + +### 复盘(复盘台) +把一条已发布内容的表现读回来,写成这个账号的经验;同一页上还能查发布留痕、核商单与收支。 + +复盘那半: + +- 待复盘项 +- 这一条的表现数据 +- 归因结论 —— 由 AI 给出,可编辑 +- 确认与改判 —— 采纳、驳回或改后再用 +- 回写目标提示 —— 这次回写到哪个账号 +- 历史复盘 + +记录与对账那半: + +- 发布记录 —— 谁在什么时候确认发的、发的是哪一版 +- 单条溯源 —— 从记录回到内容与版本 +- 对账核对区 —— 内容、发布记录、收支三样对得上 +- 商单与收支 + +--- + +## 四、一条内容从零到复盘:用户实际怎么走 + +**第 1 步 · 找选题(在「选题」页)** +在看对标内容时发现一条数据明显高于该账号平时水平的内容,或从评论区洞察取到候选,或随手记一条灵感。选中的进选题库(待做)。 +也可以从「首页」的今日待处理、异常值提示直接跳到某条对标或选题。 + +**第 2 步 · 拆解存下来(跳到「资产」页)** +对某条对标内容发起拆解 → **跳到「资产」页**,把拆解结果按角度/结构/开场白/标题分区入库。 + +**第 3 步 · 创作(在「创作」页)** +从选题库把一条选题**转入创作** → **跳到「创作」页**,新建或切换当前内容。 +在创作页走七个环节:选题 → 思路 → 文案 → 标题 → 封面 → 检查 → 成稿,每一步可回退。 +需要时从「资产」页**引用**已入库的写法。 +成稿后进入版本管理:一稿多版,或按各账号各平台展开成多版本,逐版确认。 +过程中要查某个账号的口径 → **跳到「账号」页**看画像,**再跳回来**。 + +**第 4 步 · 发布(跳到「投放」页)** +成稿后把版本送去发布 → **跳到「投放」页**,创建发布任务。 +在投放页选目标账号与平台,逐版编辑,跑检查(硬拦项挡住、软劝只提醒),二次确认后发出。 +发布前要核账号口径 → **跳到「账号」页**,**再跳回来**。 + +**第 5 步 · 记录(在「复盘」页的记录与对账那半)** +发布产生的发布记录,在「复盘」页可以查到,含随记录一起留下的检查结果。 + +**第 6 步 · 复盘(在「复盘」页的复盘那半)** +对已发布内容发起复盘,读回表现数据 → AI 归因 → 人工裁决(确认/驳回/改后再用)→ 确认后**回写到该账号**。 +回写落到「账号」页那个账号的记忆条目里。 + +**第 7 步 · 反哺(可选)** +复盘结论可以回到「首页」(刷新异常值与今日待处理)或回到「选题」页(以这条结论为来源建一条草稿选题)。 + +**主线一句话**:选题 → 内容 → 版本 → 发布任务 → 发布记录 → 复盘结论。 + +--- + +## 五、要来回跳的地方(现状) + +1. **创作 ↔ 账号**:创作中要查账号口径,去账号页看完再回来。来回一趟两跳。 +2. **投放 ↔ 账号**:发布前核账号口径,同样是过去再回来。 +3. **投放 → 复盘**:发布完去复盘;反过来从一条发布记录还能回到它当时用的那一版,即回到投放页。 +4. **选题 → 资产 → 创作**:拆解落资产页、写稿落创作页,写法再由资产页的引用入口带回创作。三步跨三页。 +5. **首页 → 其它五页**:首页像个分诊台,从今日待处理分别跳去选题、创作、投放、复盘、账号。 +6. **复盘 → 首页 / 选题**:复盘结论反哺回前述两页。 +7. **全局**:随手记在任意页面可达,记完落到选题库。 + +--- + +## 六、想请你回答的问题 + +1、这套七页的划分(首页/选题/创作/投放/复盘/账号/资产)合理吗?有没有该合并、该拆开、或该换归属的? + +2、操作路径上,用户走完一条内容有哪些**不必要的来回跳**?哪几处该合并成一步(在页内做完)、哪几处该换落点? + +3、每页的板块数量与顺序合理吗?有没有哪一页把不该它负责的事揽过来了,或该有的没有? + +4、首页定位成「分诊台」(今日待处理 + 账号矩阵 + 异常值)对吗?还是应该拆开或换个定位? + +5、「复盘」页同时装 10 个板块(复盘 6 个 + 记录与对账 4 个),会不会太挤?记录与对账该不该独立成页? + +6、「账号」页不在生产链的任何一环上(只提供上下文),它和创作、投放之间的来回跳该怎么减少? + +7、全局可达的「随手记」这样放合理吗?还有别的该全局可达的入口吗? + +请按你看到的**问题严重程度**排个序,每条给出:问题是什么、为什么是问题、建议怎么改。 + +``` + +--- + +## 二、GPT 的建议 —— 原文留痕 + +**来源**:本机常驻浏览器实例(CDP `http://127.0.0.1:9223`)里的 ChatGPT 网页版,页面 `https://chatgpt.com/`,登录态可用。 +**提问发出**:2026-10-09 约 16:26(GMT+8)。硬证据=发送后回读输入框长度归零(读到 1,见 `tmp/gh_send_log.txt`)。 +**回复取回**:2026-10-09 约 16:33(GMT+8)。完稿判据=正文长度连续 3 次采样不变(间隔 5 秒,见 `tmp/gh_wait_log.txt`)。 +**原文落盘**:`_scratch/reply_raw.txt`(28816 字符);提问包 `_scratch/prompt.txt`(3543 字符)。 +**sha256**:原文 `74a67970620493d75e121d8d58ef6fe9b71c4b50195f15fd7feee5b07851d2c7` | 提问包 `33f7fb9fe89e3b938a611023b9cb170d971125146d2959ed593fde11c1541087`。 + +**留痕说明(⛔ 一个字没改,只交代提取噪声)**:下面这段是从页面正文直接导出的 `innerText`,逐字未改。三处噪声来自导出,不是 GPT 的措辞 —— ① 它画的表格被导成制表符分隔的行(同一行的几个单元格连在一起,中间夹着空行);② 代码块/分隔处出现多余空行;③ 页尾的「ChatGPT 可能会出错。请核查重要信息。/最新一条回复/思考」是页面本身的固定文案,不是它的回答,已剔出。读内容按语义读就行,原文照贴。 + +```text +内容生产工作台:页面结构与操作动线重构建议 + +我的核心判断是:七个一级页面不需要推倒重来,但必须重新划清页面职责,并把跨页面的业务动作改成围绕“当前内容”连续完成的工作流。 + +你这套产品的主要问题,不是页面数量太多,而是三种东西混在了同一层: + +工作流程:选题、创作、发布、复盘。 + +上下文与能力:账号画像、资产引用、AI 生成、版本管理。 + +记录与查询:发布留痕、历史版本、复盘历史、对账记录。 + +前者需要有明确的前后顺序,后两者应该在需要时就近调用,或独立提供查询入口。现在的结构把它们都做成了页面级功能,导致用户明明在完成同一条内容,却需要在多个页面之间搬运上下文。 + +我建议采用以下原则: + +保留独立工作台,但减少流程中的页面跳转。 + +内容是主对象,选题、版本、发布记录和复盘是同一条业务链上的关联对象。 + +账号画像与资产是被调用的能力,不应成为生产流程的中断点。 + +工作入口与查询入口分开:操作在流程中完成,历史记录集中检索。 + +首页负责分配注意力,不负责承载全部业务操作。 + +下面按照问题严重程度排序,并给出具体的页面划分、板块归属和操作路径调整建议。 + +一、先给结论:哪些保留,哪些调整? + +首页:保留,明确为工作总览与任务分流 + +不承担具体生产操作;点击待办后进入对应工作区,并定位到具体内容和待处理动作。 + +选题、创作、投放、复盘:保留为四个核心工作区 + +明确各自的业务对象与完成条件,形成“选题 → 内容 → 发布 → 复盘”的连续链路。 + +账号:保留独立管理页,但增加流程内账号上下文 + +创作、投放时就地查看账号口径,不再为了查画像而离开当前任务。 + +资产:保留独立资产库,拆解与引用尽量留在当前工作流 + +资产库负责积累、整理与检索;选题拆解和创作引用都应能在当前页面直接完成。 + +记录与对账:从复盘中拆出独立的查询工作区 + +发布记录、版本溯源、检查留痕和收支核对,统一按记录对象检索;复盘页专注表现分析和经验回写。 + +这里需要注意:拆分页面不等于增加一级导航。 记录与对账可以先作为复盘下的独立子工作区;如果它有独立、高频的查询需求,再提升为一级页面。没有必要仅仅为了减少板块数量,就立即增加一项导航。 + +二、按严重程度排序:最应该先改的 9 个问题 + +排序依据:对主流程连续性的影响、用户重复操作的程度、业务对象是否容易混乱,以及调整后能否同时解决多个问题。 + +P0|问题 1:七个页面没有围绕同一条内容形成连续工作流 +最高优先级 + +问题是什么 + +现有流程依赖用户在页面之间主动完成业务对象的转移: + +选题库里的选题,要跳到创作页才能变成内容。 + +创作页的成稿,要跳到投放页才能变成发布任务。 + +投放产生的记录,要到复盘页查询。 + +复盘结论,再回写账号记忆,并可能回到选题页。 + +虽然流程在业务逻辑上完整,但页面之间的接力关系还不够明确。 + +为什么是问题 + +用户真正关心的不是自己当前在哪个页面,而是: + +我正在做哪条内容? + +这条内容目前处于什么状态? + +接下来要做什么? + +我之前生成、修改、确认的结果是否还在? + +这条内容发布后表现如何? + +如果每次切换页面都要重新找到内容、重新确认版本或重新选择目标,页面跳转就会变成上下文切换成本。 + +尤其在多账号、多平台场景下,一条选题可能展开成多个版本、多个发布任务。如果页面之间只通过跳转衔接,而没有稳定的内容关联关系,用户很容易混淆母版、平台版、账号版与实际发布版本。 + +建议怎么改 + +建立统一的内容对象和状态流转机制。 + +选题 + +选题来源、待做状态、目标账号 + +内容工作区 + +思路 → 文案 → 标题 → 封面 → 检查 → 成稿 + +母版、账号版、平台版共享同一内容关联关系 + +发布任务 + +目标选择、逐版检查、发布确认 + +发布记录 + +实际发布版本、目标账号、时间、检查留痕 + +复盘结论 + +关联具体发布记录,回写指定账号的经验 + +建议明确四个设计约束: + +每条内容有稳定的内容标识。 + +每个版本都能追溯到母版、目标账号和目标平台。 + +每次发布都生成独立的发布记录,不能只依赖内容当前状态。 + +复盘必须关联实际发布记录,而不是仅关联一条抽象内容。 + +页面跳转可以保留,但跳转时必须带上内容、版本、账号和任务的上下文。用户可以换工作区,但不应该因为换页面而重新开始找工作对象。 + +P0|问题 2:复盘页同时承担复盘、历史查询、发布溯源、财务对账,职责过载 +最高优先级 + +问题是什么 + +当前复盘页包含两套不同的任务: + +复盘工作 + + + +记录与对账工作 + + + + +待复盘项 + + + +发布记录 + + + + +表现数据 + + + +单条溯源 + + + + +AI 归因 + + + +对账核对区 + + + + +人工确认与改判 + + + +商单与收支 + + + + +回写目标提示 + + + +记录关联与核查 + + + + +历史复盘 + + + +— + +它们虽然都与发布后的内容有关,但工作目的并不相同。 + +为什么是问题 + +复盘的核心动作是解释内容表现、形成结论、更新经验。 + +记录查询的核心动作是定位某次操作,确认实际发布的版本和留痕。 + +对账的核心动作是核对不同记录之间的一致性。 + +把这三种任务堆在一页,容易导致用户进入页面后不知道自己应该先处理待复盘项,还是先查历史发布记录;复盘中的内容状态与对账中的记录状态也容易相互干扰。 + +尤其是财务核对,它的工作对象不是单纯的内容表现数据,而是内容、发布事件和收支记录之间的关联。 + +建议怎么改 + +把现有复盘拆成两个工作区,必要时再把对账细分。 + +复盘工作区 + +待复盘 → 表现数据 → AI 归因 → 人工裁决 → 回写账号经验 → 历史复盘 + +默认进入待处理复盘列表,选中一条后展开该条内容的复盘详情。 + +发布记录工作区 + +发布记录 → 按内容或账号检索 → 查看发布版本、时间、检查结果 → 追溯原内容 + +同时承载历史发布事件查询,不把它混入待复盘列表。 + +对账工作区 + +内容关联 → 发布记录核对 → 商单与收支核对 → 异常记录定位 + +可先作为发布记录工作区内的一个独立子区;只有当其需要独立筛选、处理队列和工作状态时,才单独成为页面。 + +是否应该新增一级导航? + +我的建议是分两步: + +**第一阶段:**复盘仍是一级导航,在复盘内明确分开「复盘分析」与「发布记录」,对账作为记录区内的独立工作区。 + +**第二阶段:**如果发布记录和对账的查询频率、处理流程、权限或筛选条件与复盘差异明显,就将「记录」提升为一级导航,复盘只保留表现分析和经验沉淀。 + +不要把「有 10 个板块」直接等同于「一定要拆页」。真正的拆分依据是任务是否独立、是否需要独立状态和检索流程。 + +P1|问题 3:账号画像是生产流程的外部依赖,导致创作与投放反复跳转 + +问题是什么 + +创作时要去账号页查看定位、风格、受众、偏好与红线;发布时又要去账号页核对一次。 + +账号画像明明是创作与发布时的必要上下文,却被设计成必须离开当前工作区才能获取的信息。 + +为什么是问题 + +账号信息并不是用户每次都需要完整查看的独立任务。创作时,用户可能只需要知道某个账号的语气和禁用表达;投放时,可能只需要核对平台、账号归属和发布限制。 + +为了获取一两个字段而切换页面,属于不必要的页面级操作。 + +但也不建议把完整的账号画像复制到创作页、投放页各自维护,否则会产生多份数据、口径不一致的问题。 + +建议怎么改:账号独立管理,流程内就地读取 + +创作工作区 + +当前文案 + +持续编辑,不离开当前内容 + +账号口径 + +就地查看风格、受众、红线 + +投放工作区 + +当前发布版本 + +逐版检查与确认 + +账号发布约束 + +就地查看目标、限制和检查结果 + +具体调整: + +创作页:增加「当前目标账号」上下文区,按需展开画像摘要。 + +投放页:每个发布版本旁直接展示对应账号的必要信息与检查结果。 + +账号页:继续负责完整画像编辑、记忆管理、关联内容查询。 + +账号画像只维护一份权威数据;创作与投放读取它,不各自复制一套。 + +当用户确实需要修改完整画像时,再进入账号管理页,完成后能够返回原内容、原版本和原步骤。 + +这既保留了账号作为独立管理对象的合理性,也避免把它强行塞进生产主线。 + +P1|问题 4:选题拆解、资产沉淀、创作引用被切成了三个分离动作 + +问题是什么 + +当前用户发现一条对标内容后: + +在选题页发现对标内容。 + +跳转到资产页,将拆解结果分类入库。 + +再跳到创作页,引用已经入库的资产。 + +这条路径让用户为了完成一个连续的认知过程,经历了多次页面切换。 + +为什么是问题 + +拆解、保存和使用本来就存在紧密关系,但三者的页面落点不同。 + +另外,资产有两种不同的使用场景: + +需要长期积累、分类和整理的资产管理。 + +为当前这条内容临时挑选并引用的资产使用。 + +这两种场景不应该要求用户遵循完全相同的页面路径。 + +建议怎么改 + +将「资产库管理」与「资产使用」分开。 + +选题页:发现与拆解 + +选中对标内容 → 发起拆解 → 查看并整理拆解结果 + +当前页面完成保存 + +选择角度、结构、开场白或标题类型,保存到资产库 + +创作页:就地引用 + +在写思路、文案、标题时打开资产选择区,引用所需条目 + +资产库仍然独立存在,用于全量检索、分类整理、查看出处与维护资产。 + +具体建议: + +在选题页中直接完成拆解结果的确认与入库,不要因为保存资产而强制切页。 + +在创作页中直接搜索和引用资产,不要为了选一条开场白而跳去资产页。 + +资产库保留完整管理能力:分类浏览、单条详情、出处、草稿标记和引用情况。 + +被引用的资产应保留来源关系,方便后续查看这条内容使用了哪些写法。 + +这样可以把「选题 → 拆解 → 入库 → 创作」变成连续操作,而不是依赖用户记住每一步应该跳到哪一页。 + +P1|问题 5:首页同时展示待办、矩阵、异常、最佳内容、全局检索,定位还不够聚焦 + +问题是什么 + +首页既是总览页,又是任务分诊台,还包含检索与内容发现能力。 + +这几个职责并非完全冲突,但如果都按完整板块展示,首页会变成另一个功能聚合页,而不是帮助团队快速确定下一步工作的入口。 + +为什么是问题 + +用户每天进入工作台,通常需要快速判断: + +哪些事情必须先处理? + +哪些账号出现异常或有待发布的内容? + +我应该从哪一条内容继续工作? + +账号矩阵、异常值、待办是为这些问题服务的;最佳内容和全局检索则是辅助能力。如果五者地位相同,页面很难形成清晰的优先顺序。 + +建议怎么改:首页保留,但把核心定位收敛到工作总览 + +推荐顺序: + +第一层:今日待处理 + +待审、待确认、待发布、待复盘等任务,支持按任务类型筛选,点击后进入具体工作对象。 + +第二层:账号矩阵 + +查看各账号今天的内容安排、发布状态与表现摘要,点击账号或内容即可继续处理。 + +第三层:异常与需要关注的内容 + +呈现值得检查的数据异动,点击后定位到对应内容或复盘对象。 + +辅助入口:全局检索 + +作为全局工具使用,不必占据与待办相同的主内容层级。 + +辅助信息:本月表现最好的一条 + +可以保留为可选的内容洞察入口,但不应挤占待处理任务的优先位置。 + +页级数据摘要不必与下面的板块重复展示完全相同的信息。建议保留少量真正能帮助用户判断工作负荷的汇总数字;如果「今日待处理数」已经在待办区清晰呈现,就不必在首屏反复强调。 + +首页不需要拆成多页。 它应该是一张能够跳转到具体任务的总览,而不是一个需要用户在其中完成创作、发布和复盘的超级页面。 + +P1|问题 6:投放、发布记录与复盘之间,缺少以“发布事件”为中心的衔接 + +问题是什么 + +当前描述中,发布记录统一放在复盘页;用户发布后去复盘,而查询记录时又可能返回投放页查看当时的版本。 + +这里混淆了三个不同对象: + +发布任务:准备向哪些目标发布哪些版本。 + +发布事件:实际发生了什么、何时发生、结果如何。 + +复盘记录:对已发布内容表现形成的分析与结论。 + +为什么是问题 + +一条内容可以有多个版本,一次发布任务也可以包含多个目标;每个目标可能有不同的发布结果。 + +如果记录只按「内容」组织,用户可能无法分辨某条内容在不同账号、平台或不同时间的实际发布情况。复盘如果直接绑定内容而不是实际发布事件,也可能对错误的版本或数据进行分析。 + +建议怎么改 + +明确三个对象的关系: + +投放页负责发布动作:准备、编辑、检查、确认、查看当前任务状态。 + +记录工作区负责事实留痕:发布了什么版本、发往哪里、何时确认、实际结果是什么。 + +复盘页负责解释表现:以实际发布事件为入口,读取对应数据并生成复盘结论。 + +从复盘回看历史时,应先定位实际发布事件,再追溯到当时的版本快照。不能只返回内容当前编辑状态,因为内容在发布后可能已经继续修改。 + +建议将以下信息关联保存: + +对象 + + + +必须能够追溯的信息 + + + + +内容 + + + +原始选题、内容身份 + + + + +版本 + + + +母版关系、版本内容、对应账号与平台 + + + + +发布任务 + + + +目标集合、检查结果、确认操作 + + + + +发布事件 + + + +实际发布版本、目标、时间、结果 + + + + +复盘记录 + + + +对应发布事件、表现数据、归因、确认结果 + + + + +账号记忆 + + + +复盘来源、回写时间、关联结论 + +这属于页面结构背后的对象关系要求,不是视觉实现细节。对象关系清晰,页面间的返回和追溯才能真正顺畅。 + +P2|问题 7:创作页七个环节、版本管理、录制卡片都在同一页,缺少明确的工作层级 + +问题是什么 + +创作页包含: + +七步流程导航。 + +当前环节工作区。 + +AI 产出与采纳。 + +资产引用。 + +版本管理。 + +录制卡片与画板。 + +当前内容上下文。 + +其中既有流程步骤,也有辅助能力,还有成稿后的衍生任务。 + +为什么是问题 + +这些板块的生命周期不同。 + +思路、文案、标题、封面、检查属于创作流程;AI 产出属于每个环节都可能使用的能力;资产引用是按需调用的能力;版本管理与录制卡片则是在成稿后展开的任务。 + +如果把它们视为同一层级的常驻板块,用户会难以理解自己当前是在完成创作步骤,还是在管理多个版本,还是在制作录制材料。 + +建议怎么改:把创作页分成三个层次 + +第一层:当前内容与创作进度 + +显示当前选题、内容状态、七步流程位置和必要的返回入口。 + +第二层:当前环节工作区 + +每次聚焦当前步骤的输入、产出、编辑和确认;AI 生成、资产引用作为当前步骤的辅助能力。 + +第三层:成稿后的版本与衍生任务 + +完成成稿后进入版本展开与管理;录制卡片和画板成为基于成稿的衍生工作区。 + +注意:这并不意味着版本管理必须成为独立一级页面。更合理的是让它成为创作工作区内一个明确的子工作区,并能从投放页、记录页返回相应版本。 + +另外,七个环节的描述中,「成稿」既是最后一步,又是进入版本管理的条件,建议明确它是一个可识别的完成状态和工作区切换点,而不只是七步导航中的普通一项。 + +P2|问题 8:随手记全局可达是合理的,但“记完落到选题库”过于单一 + +问题是什么 + +目前随手记可以从任意页面打开,记完统一落到选题库。 + +为什么是问题 + +随手记是捕捉碎片信息的能力,而碎片信息的用途不一定都是选题。 + +例如: + +对标视频中的开场写法,可能应该保存为资产。 + +某个账号的表达限制,可能是待更新的账号记忆。 + +一个数据异常的观察,可能是待检查的复盘线索。 + +一句尚未成形的创意,才可能是待处理选题。 + +如果所有记录都默认进入选题库,用户仍然需要在事后整理和搬运。 + +建议怎么改 + +保留全局随手记,但将它定位为统一的快速捕捉入口,而不是固定的选题创建入口。 + +建议的逻辑是: + +随时记录,不强迫用户立即填写完整的业务字段。 + +保存后先进入一个统一的待整理状态。 + +用户可以选择将记录转成选题、资产或待办。 + +如果用户明确选择了某种类型,就直接创建对应对象。 + +来源页面、关联内容和时间等上下文尽量自动保留。 + +需要补充的全局入口,我建议按以下顺序考虑: + +全局能力 + + + +是否建议 + + + +原因 + + + + +随手记 + + + +必须保留 + + + +碎片灵感可能出现在任何工作环节 + + + + +全局检索 + + + +建议全局可达 + + + +快速找到内容、版本、账号、发布记录和资产 + + + + +快速创建选题 + + + +可选 + + + +如果选题创建频率高,值得减少进入选题页的成本 + + + + +任务中心 + + + +不必重复建设 + + + +首页已负责待办总览,可通过全局入口直达具体任务 + + + + +快速发布 + + + +不建议直接全局发出 + + + +发布必须基于明确版本、目标与检查结果,不能绕过必要确认 + +其中,全局检索应优先于增加更多全局快捷操作。因为它解决的是用户在任何页面都可能遇到的「我要找某个对象」问题。 + +P2|问题 9:选题页与资产页存在边界重叠,账号页与首页也有信息重复风险 + +问题是什么 + +选题页包含对标监控、评论洞察、选题库和灵感速记;资产页包含拆解后的写法;账号页展示关联内容;首页又展示矩阵状态与异常。 + +这些信息可能围绕同一条内容重复出现,但缺少明确的主归属。 + +为什么是问题 + +当同一个内容或信息出现在多个页面时,用户容易产生两个疑问: + +我应该在哪里修改它? + +其他页面展示的是实时状态,还是一份独立副本? + +例如,首页显示账号今日待发内容,投放页又展示目标版本,账号页又展示关联内容。如果每处都承担独立编辑职责,状态一致性会变得复杂。 + +建议怎么改:为每类对象指定唯一的管理归属 + +对象 + + + +主归属页面 + + + +其他页面允许做什么 + + + + +对标内容与候选选题 + + + +选题 + + + +首页展示摘要;创作读取已选选题 + + + + +可复用的写法与结构 + + + +资产 + + + +选题页发起拆解;创作页就地引用 + + + + +正在生产的内容 + + + +创作 + + + +首页展示状态;投放读取已确认版本 + + + + +目标账号及画像 + + + +账号 + + + +创作与投放就地读取必要上下文 + + + + +发布任务 + + + +投放 + + + +首页显示待处理状态;记录区展示历史结果 + + + + +实际发布事件 + + + +记录工作区 + + + +复盘读取数据并关联具体事件 + + + + +复盘结论 + + + +复盘 + + + +账号页展示已回写的记忆条目 + + + + +账号记忆 + + + +账号 + + + +复盘确认后发起回写,不维护另一份副本 + +这里的关键不是限制页面间的信息展示,而是明确:每种对象只在一个地方拥有完整的管理职责,其他页面通过关联和上下文来使用它。 + +三、七个页面应该如何重新划分板块? + +以下是我建议的目标结构。它保留原有业务能力,主要改变板块顺序、归属与嵌套关系。 + +01 首页|工作总览 + +① 今日待处理 ② 账号矩阵 ③ 异常与待关注内容 ④ 全局检索入口 ⑤ 可选的表现摘要 + +移除独立于工作任务之外、会争夺首屏注意力的冗余摘要;所有待办都能定位到具体对象。 + +02 选题|发现与选题管理 + +① 对标监控概览 ② 对标内容 ③ 评论洞察 ④ 选题库 ⑤ 灵感速记 ⑥ 拆解与入库动作 + +对标发现、选题形成、资产拆解在同一个发现工作流里衔接;选题库保留待做、在写、已用等状态。 + +03 创作|内容生产与版本管理 + +① 当前内容上下文 ② 七步创作流程 ③ 当前环节工作区 ④ AI 产出与采纳 ⑤ 资产引用 ⑥ 账号上下文 ⑦ 成稿后的版本与录制任务 + +把账号信息和资产引用改为按需调用能力;成稿后才展开版本管理与录制衍生工作区。 + +04 投放|发布执行 + +① 待发布版本 ② 目标账号与平台 ③ 逐版编辑 ④ 检查结果 ⑤ 发布确认 ⑥ 当前任务结果与记录入口 + +先选定发布对象,再按目标逐版核对、检查与确认。历史记录的完整检索转到记录工作区。 + +05 复盘|表现分析与经验沉淀 + +① 待复盘项 ② 发布表现数据 ③ AI 归因 ④ 人工确认与改判 ⑤ 账号回写目标 ⑥ 历史复盘 + +不再将完整的发布记录查询、版本溯源和财务核对作为同级常驻板块。 + +06 账号|账号管理与记忆 + +① 账号列表 ② 画像详情 ③ 记忆条目 ④ 关联内容 ⑤ 画像与记忆维护 + +完整画像和记忆仍在这里维护;生产流程只调用必要的账号信息。 + +07 资产|可复用内容资产 + +① 分类分区 ② 资产检索与列表 ③ 单条详情 ④ 来源与引用关系 ⑤ 资产维护 + +作为长期管理和检索入口,而不是每次拆解或引用时的必经页面。 + +记录|发布留痕与对账(候选独立工作区) + +① 发布记录检索 ② 单条版本溯源 ③ 检查与确认留痕 ④ 对账核对 ⑤ 商单与收支 + +第一阶段可作为复盘下的子工作区;达到独立工作需求后再提升为一级导航。 + +关于导航顺序 + +原来的七项导航按业务主线排列,整体是合理的。需要做的不是大幅更换顺序,而是明确两组不同性质的页面: + +生产工作区:选题、创作、投放、复盘。 + +管理与辅助工作区:账号、资产,以及未来可能独立的记录工作区。 + +首页保持最前,账号与资产放在主线工作区之后是合理的。记录如果最终升级为一级页面,可以放在复盘之后,形成「执行发布 → 分析表现 → 查询历史记录」的清晰分工。 + +四、一条内容的目标操作路径:应该怎么走? + +我建议将完整路径改成下面这样。 + +1 + +发现选题|选题页 + +发现对标内容或评论洞察 → 生成候选选题 → 确认进入选题库。 + +若需要拆解写法,在当前工作流中直接拆解、整理并保存资产,不强制跳到资产页。 + +2 + +形成内容|创作页 + +从选题进入创作 → 完成七步流程 → 按需引用资产、查看账号口径 → 确认成稿。 + +在当前内容上下文中展开版本管理,按账号和平台生成版本,并保留版本间的来源关系。 + +3 + +执行发布|投放页 + +接收待发布版本 → 选择目标账号与平台 → 逐版编辑和检查 → 确认发布。 + +账号口径就在投放上下文中查看,不需要离开当前任务;每次实际发布产生可追溯记录。 + +4 + +追溯发布|记录工作区 + +自动生成发布留痕;需要核查时按内容、账号、平台或发布任务定位具体记录。 + +日常发布不必强制进入记录页,只有查询历史、溯源或对账时才进入。 + +5 + +分析表现|复盘页 + +从待复盘项或具体发布记录进入 → 读取对应表现 → AI 归因 → 人工确认或改判。 + +确认后回写指定账号的记忆,并保留复盘结论与来源发布事件之间的关系。 + +6 + +反哺下一轮|选题或创作 + +可从复盘结论创建新选题,或在后续创作中调用已沉淀的资产与账号记忆。 + +这是有明确关联关系的衔接动作,不需要将复盘结果手工复制到另一页面。 + +这里有一个很重要的区别:主流程不必变成一个巨大的单页应用。 选题、创作、投放和复盘仍然可以有各自的独立工作区;真正需要优化的是它们之间的衔接、上下文传递和就地操作能力。 + +五、哪些跳转应该消除,哪些应该保留? + +现状中的跳转 + + + +建议 + + + +原因 + + + + +创作 → 账号 → 创作 + + + +改为创作内查看账号摘要 + + + +获取少量口径不应该中断创作 + + + + +投放 → 账号 → 投放 + + + +改为投放内查看目标账号信息 + + + +账号约束应贴近发布版本 + + + + +选题 → 资产拆解 → 选题/创作 + + + +拆解入库留在当前流程 + + + +保存资产不应强制切换工作区 + + + + +创作 → 资产 → 创作 + + + +改为创作内引用资产 + + + +引用是创作过程中的辅助能力 + + + + +创作 → 投放 + + + +保留,但传递版本上下文 + + + +创作完成和发布执行是不同工作任务 + + + + +投放 → 记录 + + + +自动生成记录,按需查看 + + + +留痕是发布的结果,不应成为每次发布的额外步骤 + + + + +记录 → 复盘 + + + +保留,但定位到具体发布事件 + + + +历史发布与表现分析是不同任务 + + + + +复盘 → 账号 + + + +回写动作留在复盘流程内,账号页查看完整结果 + + + +避免人工跳转、复制与重复录入 + + + + +复盘 → 选题 + + + +保留,但提供基于结论创建选题的动作 + + + +这是一个新的业务任务,而非同一任务的页面切换 + + + + +首页 → 其他工作区 + + + +保留 + + + +首页的职责就是定位待处理任务并分流 + +注意,不是所有跳转都要消除。跨任务切换可以保留,跨页面获取上下文的强制跳转应该优先消除。 + +六、最后给出实施优先级 + +如果要真正落地,我建议分三批改,而不是同时重构所有页面。 + +第一批:先打通主链路 +最高优先级 + +明确内容、版本、发布任务、发布事件、复盘结论的关联关系。 + +确保选题进入创作、成稿进入投放、发布记录进入复盘时自动传递上下文。 + +创作和投放增加就地查看账号信息的能力。 + +将复盘分析与发布记录查询分开。 + +验收标准:用户能从一条选题追踪到实际发布版本和复盘结论,无需重新搜索、重新选择对象或手工复制关键信息。 + +第二批:减少重复操作 +次优先级 + +将选题拆解和资产入库整合到发现流程中。 + +将资产引用、账号口径查询变成创作和投放中的就地能力。 + +明确创作流程、AI 辅助、版本管理与录制任务的层级。 + +让随手记支持多种后续处理方向。 + +验收标准:常见任务不需要为了引用资产、核对账号或保存拆解结果而离开当前工作区。 + +第三批:调整信息架构 +结构优化 + +收敛首页的信息层级。 + +将发布记录、溯源与对账整理为独立工作区。 + +根据实际使用情况决定是否新增「记录」一级导航。 + +明确账号与资产的独立管理职责,避免多处维护同一对象。 + +验收标准:每个对象都有明确的管理归属,每个页面都能用一句话解释自己主要负责什么。 + +最终判断 + +这套工作台的七页骨架是合理的,不建议一开始就做大规模合并。最值得调整的是页面之间的职责边界,以及同一条内容在不同工作区之间的连续性。 + +如果只允许先做三项改动,我会优先选择: + +打通内容、版本、发布记录和复盘的关联链路。 + +把账号画像与资产引用从必经跳转改成流程内调用。 + +将复盘分析与发布记录、对账分开。 + +这三项会同时解决多处页面跳转、信息重复和业务对象混乱的问题。其余调整可以在这条主链路稳定后逐步推进。 +``` + +--- + +## 三、逐条采纳决策 + +判据:**改结构、改口径、扩范围的一律不自行拍板**(列「待拍板」交用户);页面内顺序/命名/层级这类不动页集合的调整才「采纳」。 + +| 编号 | GPT 的建议(要点) | 处置 | 理由与落点 | +|---|---|---|---| +| G1 | 七页骨架合理,不建议推倒重来;根子是「工作流程/上下文与能力/记录与查询」三种东西混在同一层 | 采纳 | 与现版解耦口径一致(现版已按「核心业务对象 + 数据流转」重排归属)。落点:②段两份现状,不改。 | +| G2 | 五条原则:保留独立工作台但减少流程跳转/内容是主对象/账号画像与资产是被调用的能力不做中断点/工作入口与查询入口分开/首页负责分配注意力 | 部分采纳 | 前三条与第四条前半成立,可作③段的页内分层依据;「工作入口与查询入口分开」会动页集合 ⇒ 待拍板 D2。 | +| G3 | 首页保留,定位为工作总览与任务分流,点待办进入并定位到具体对象 | 采纳 | 现版首页主操作就是「决定先处理哪件事并进到那件事」。落点:②段 2b §五 P1。 | +| G4 | 选题/创作/投放/复盘 保留为四个核心工作区 | 采纳 | 现版已是。零改动。 | +| G5 | 账号保留独立管理页,但创作、投放要能就地查看账号口径,不强制跳页 | 采纳 | 改动最小、方向明确,属页面内调整不改页集合。落点:③段创作页与投放页加账号上下文区;②段在 P4/P5 补一句。 | +| G6 | 资产保留独立库;拆解与引用尽量留在当前工作流(选题页直接入库、创作页就地引用) | 部分采纳 | 「创作页就地引用」采纳;「选题页直接入库」要改资产对象的产出位置(现归属 P3 资产库)⇒ 待拍板 D3。 | +| G7 | 把「记录与对账」从复盘中拆成独立查询工作区(第一阶段作复盘下子工作区,高频再升一级导航) | 待拍板 D1 | 与现版方向相反 —— 用户 2026-10-09 刚把「记录与对账」整页并入复盘。冲突必须用户裁定,⛔ 不自行改。 | +| G8 | 导航顺序按业务主线合理、不必大改;建议分「生产工作区」与「管理与辅助工作区」两组 | 部分采纳 | 「顺序不必大改、账号与资产放主线之后」采纳(现版已是);「分成两组」不采纳 —— 现版刚按用户口径压成一层七项、零分组,再分组=回退。落点:保持一层七项。 | +| G9 | P0-1:七页没围绕同一条内容形成连续工作流;建议统一内容对象与状态流转,并明确四条约束(内容标识稳定/版本可追溯到母版与目标账号平台/每次发布生成独立记录/复盘关联实际发布记录),跳转必须带上下文 | 已在 | 四条正是现版已落地的:11 个对象字典、20 条流转契约(跨页只传对象 ID +必要上下文)、`PublishRecord` 独立成对象、流转第 13 条以 `recordId` 建待复盘项。⛔ 不重复建设。 | +| G10 | P0-2:复盘页职责过载(10 个板块),拆成「复盘工作区 + 发布记录工作区 + 对账子区」 | 待拍板 D1 | 同 G7,同一条建议的第二个说法。 | +| G11 | P1-3:账号画像让创作与投放反复跳转;创作页加「当前目标账号」上下文区、投放页每版旁展示账号必要信息、账号页只做完整编辑与记忆管理;画像只维护一份权威数据 | 采纳 | 见 G5。补:账号画像单一权威、别处只读,与现版对象字典「一个对象只有一处产生」同源。 | +| G12 | P1-4:选题拆解、资产沉淀、创作引用被切成三个分离动作;建议选题页完成拆解入库、创作页就地引用、资产库保留管理 | 部分采纳 | 同 G6 —— 引用那半采纳,入库搬迁那半待拍板 D3。 | +| G13 | P1-5:首页定位不聚焦;建议三层顺序(今日待处理 → 账号矩阵 → 异常与待关注)+ 全局检索作辅助入口 + 本月最佳作可选;页级摘要不与板块重复展示同一信息 | 采纳 | 属页内顺序与层级调整,不动页集合。落点:②段 2b §五 P1 的板块顺序与信息分档。 | +| G14 | P1-6:投放/发布记录/复盘之间缺「发布事件」为中心的衔接;建议区分「发布任务/发布事件/复盘记录」三个对象,复盘从实际发布事件入口 | 部分采纳+待拍板 D4 | 「复盘关联实际发布记录」现版已有(流转第 13 条)。但新增「发布事件」这一更细粒度对象 = 对象字典由 11 增到 12 ⇒ 扩范围,须用户定。 | +| G15 | P2-7:创作页七环节+版本管理+录制卡片同页,缺工作层级;建议分三层(当前内容与进度/当前环节工作区/成稿后的版本与衍生任务) | 采纳 | 页面内分层,不改结构。落点:③段创作页分区;②段 2b §五 P4 板块顺序已大体对应。 | +| G16 | P2-8:随手记全局可达合理,但「记完只落选题库」太单一;建议做成统一快速捕捉入口 + 待整理状态 + 可转选题/资产/待办 | 部分采纳(功能语义变更) | 会新增「待整理」状态与多种去向,属用户能感知的功能语义分叉 ⇒ 待拍板 D5。 | +| G17 | P2-9:选题页与资产页边界重叠、首页与账号页有信息重复风险;建议为每类对象指定唯一管理归属 | 采纳 | 与现版「对象冻结 + 一个对象只有一处产生」同源,可当核对清单直接用。落点:②段 2a §二 对象字典的「产生位置/被谁消费」两栏。 | +| G18 | 板块重划·首页:①今日待处理 ②账号矩阵 ③异常与待关注 ④全局检索入口 ⑤可选表现摘要 | 采纳 | 与现版 5 块基本一致;差异是把「本月表现最好的一条」降为可选、全局检索降为辅助入口。落点:②段 2b §五 P1。 | +| G19 | 板块重划·选题:在现版 5 块后加第 ⑥「拆解与入库动作」 | 待拍板 D3 | 新增板块会破「对象冻结」(新增业务能力必须先进功能清单并完成对象归属)。同 G6。 | +| G20 | 板块重划·创作:①当前内容上下文 ②七步创作流程 ③当前环节工作区 ④AI 产出与采纳 ⑤资产引用 ⑥账号上下文 ⑦成稿后的版本与录制任务 | 部分采纳 | 前 5 项与现版一致(现版把「录制卡片与画板」单列,未与版本管理合并);第 ⑥ 项按 G5/G11 采纳,但它落在框架层还是板块层需定(现版「当前内容上下文」在框架层)。 | +| G21 | 板块重划·投放:①待发布版本 ②目标账号与平台 ③逐版编辑 ④检查结果 ⑤发布确认 ⑥当前任务结果与记录入口 | 基本已在 | 现版 5 块与它向量一致,只是命名与「记录入口」的处置不同(现版把记录入口纳入流转契约而非板块)。落点:命名对齐即可,不新增板块。 | +| G22 | 板块重划·复盘:只留 6 块,把发布记录/溯源/对账/收支 4 块移出 | 待拍板 D1 | 同 G7/G10。 | +| G23 | 板块重划·账号:加第 ⑤「画像与记忆维护」 | 不采纳 | 与现版第 2 块(画像六维)、第 3 块(记忆条目)职责重复,会造成板块虚增。落点:保持 4 块。 | +| G24 | 板块重划·资产:①分类分区 ②检索列表 ③单条详情 ④来源与引用关系 ⑤资产维护 | 部分采纳 | 「来源与引用关系」现版第 3 块已含出处;「资产维护」与现有 4 块重叠,不单列。落点:保持 4 块,把「来源与引用关系」写实。 | +| G25 | 目标操作路径 6 步:发现选题 → 形成内容 → 执行发布 → 追溯发布 → 分析表现 → 反哺下一轮 | 采纳 | 与现版主线同构,差别是「追溯发布」被单列成一步(现版归在复盘页)。可作③段的验收动线。 | +| G26 | 主流程不必变成巨大的单页应用,各工作区仍各自独立 | 采纳 | 口径确认,与现版一致。 | +| G27 | 跳转·创作↔账号、投放↔账号 ⇒ 改为就地查看 | 采纳 | 同 G5/G11。这是本份里改动最小、收益最直接的一条。 | +| G28 | 跳转·选题→资产拆解→选题/创作 ⇒ 拆解入库留在当前流程 | 待拍板 D3 | 同 G6/G19。 | +| G29 | 跳转·创作→资产→创作 ⇒ 改为创作内引用资产 | 采纳 | 同 G6 前半。 | +| G30 | 跳转·创作→投放保留但传版本上下文;投放→记录自动生成按需查看;记录→复盘定位到具体发布事件;复盘→账号回写留在流程内;复盘→选题保留并给「基于结论建选题」动作;首页→其他工作区保留 | 大部分已在 | 现版流转契约逐条覆盖(第 10、14、13、17、20 条)。落点:无改动,只是确认。 | +| G31 | 实施三批(打通主链路/减少重复操作/调整信息架构)+「若只允许先做三项」 | 采纳(排期建议) | 可直接对本目标后续的排棒顺序。 | +| G32 | 最终判断:七页骨架合理,不建议一开始就做大规模合并;最值得调的是页面之间的职责边界与同一条内容在各工作区之间的连续性 | 采纳 | 与现版结论一致。 | + +**过账小计**:采纳 15 | 部分采纳 8 | 已在 3 | 不采纳 1 | 待拍板 5(=表内 32 条)。§四 的待拍板清单 D1–D5 与表内对应:D1=G7/G10/G22,D2=G2,D3=G6/G12/G19/G28,D4=G14,D5=G16。 + +--- + +## 四、卡点与交接(待拍板项) + +以下五条**只能由用户定**,本轮⛔ 一条都没自行落地。写法:先说清要决定什么,再给候选与理由。 + +**D1、复盘页里那 4 个「记录与对账」板块,要不要拆出去** +- 说明:GPT 主张拆成独立查询工作区;现版(2026-10-09 用户刚拍板)是整页并入复盘。两者方向相反,必须用户裁定,否则③段会两边都改。 +- 候选 A:维持现版(记录与对账留在复盘页)——优点:与用户口径一致、页集合稳定;缺点:复盘页 10 个板块偏挤,复盘与查记录是两种任务。 +- 候选 B:按 GPT 拆出去(复盘只留 6 块复盘板块)——优点:一页一件事、查询独立;缺点:推翻用户刚拍板的归属,且要动页集合与流转契约。 +- 候选 C:折中——不做成两页,但在复盘页内**明确分成两个子工作区**(复盘分析/记录查询),对外仍是一页。 +- 倾向:C。它保住用户刚定的页集合,又解决「一页两种任务」的挤。 + +**D2、「工作入口与查询入口分开」这条原则要不要落地** +- 说明:GPT 把它列为五条原则之一。它一旦落地,就会牵动页集合(D1 是它的一个具体落点)。 +- 候选 A:只作②段的表述原则,不改页集合——优点:零结构风险;缺点:原则没有落点。 +- 候选 B:连同 D1 一起落地成页集合改动——优点:彻底分开;缺点:与现版冲突,改动面大。 +- 倾向:A。先当原则写进②段,等 D1 定了再决定要不要落成页。 + +**D3、拆解结果在哪一页入库(资产对象的产出位置)** +- 说明:现版归属在资产库那一页;GPT 主张在选题页拆完就地入库。这决定「资产条目」这个对象的产生位置,动的是对象归属判据本身。 +- 候选 A:维持现版(产出位置在资产库)——优点:一个对象一处产生,判据干净;缺点:找选题→拆解要跨页一趟。 +- 候选 B:按 GPT 改成选题页入库——优点:发现与拆解连成一气;缺点:资产对象的产出位置从「资产库」挪到「选题」,对象字典与流转契约都要跟着改。 +- 候选 C:产出位置不动,但在选题页给一个**就近入库**的动作入口(不改变对象归属,只减一跳)。 +- 倾向:C。既减了跳转,又不破「一个对象只有一处产生」。 + +**D4、要不要新增「发布事件」这个对象** +- 说明:GPT 想把「发布任务/发布事件/复盘记录」分成三个对象。现版是 11 个对象,复盘已通过「发布记录 ID」关联到具体那条记录。 +- 候选 A:不加(沿用现版 11 个对象)——优点:对象字典稳定;缺点:GPT 担心的「一次任务发多个目标、各目标结果不同」这种粒度,现版是压在一个记录里的。 +- 候选 B:加,对象字典 11 → 12——优点:一次任务对多目标、各自结果能分别留痕,复盘可精确到事件;缺点:属扩范围,功能清单与流转契约都要重过一遍。 +- 倾向:A(以本次为限)。现版一条发布记录已经绑定到具体版本与账号,够用;等真的出现「一次任务多目标各不相同」的实需再加。 + +**D5、随手记要不要从「只落选题库」改成「统一捕捉+可转多类型」** +- 说明:GPT 指碎片信息不都是选题(可能是资产写法、账号记忆、复盘线索)。这是用户能感知的功能语义变化,且会新增「待整理」这一状态。 +- 候选 A:维持现版(记完落选题库)——优点:零改动、语义简单;缺点:非选题的碎片得事后自己搬。 +- 候选 B:按 GPT 改成统一捕捉+待整理+可转选题/资产/待办——优点:捕捉与归类分开,更贴真实用法;缺点:新增状态与新去向,功能清单要补条目。 +- 倾向:B,但**放到下一轮**。它值这个改动,却属扩范围,得先确认。 + +--- + +## 五、本棒没做的(交代清楚) + +- ⛔ 没有把 GPT 的话当结论抄进②段任何一份文档 —— ②段是只读输入,本棒一个字没改。 +- ⛔ 没有自行落地任何「待拍板」项,包括与现版冲突的「拆复盘页」。 +- ⛔ 没有重复上一轮问过的规划层问题(页壳该不该进骨架/流转怎么定/功能归属怎么收敛/②③口径冲突/导航要不要回改)。 +- ⛔ 没动原型,没动其它目标目录。 +- 浏览器:全程**只连不起**,从头到尾**复用同一个标签页**(收工 `list_tabs()` 复核,自己没开新标签)。 + +--- + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/专题/产品框图-热点与选题-全球版.html b/docs/pm/mcn-shortvideo-agent/专题/产品框图-热点与选题-全球版.html new file mode 100644 index 0000000..58ad0b1 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/产品框图-热点与选题-全球版.html @@ -0,0 +1,304 @@ + + + + + +产品框图 · 热点与选题(全球版) + + + + +
+

产品框图 · diagram-design · Architecture · doc-wide · 全球口径

+

热点与选题 · 产品框图(全球版:12 平台 + 海外热点源)

+

左起四段:热点源进来 → 12 个平台各自成形 → 判断层按同一套口径算 → 落到 P2 选题雷达四块和下游。珊瑚色的两格是本次要补的部分(海外 6 平台、海外搜索趋势源),灰色实线那半是上一版就有的国内口径。

+ + 热点与选题产品框图(全球版):海外与国内热点源、12 平台矩阵、判断层口径、P2 四块与下游 + 四段横向结构。第一段是热点源:海外搜索趋势、海外社区热榜、YouTube 频道 RSS、科技与新闻源,加国内 60s 主源与 xxapi 备源。第二段是 12 个平台的矩阵,海外 6 与国内 6 各一栏,每栏逐行写平台名、内容形态与发布方式。第三段是判断层:热度指数归一化公式、趋势窗口、去重归并(按地区与语言分桶)、四层分类与七维价值分、风险与过期拦截。第四段是 P2 选题雷达四块与下游四页,并有一条复盘回写的虚线回到判断层。 + + + + + + + + + + + + + + + + + + + + +一 · 热点源(已查证:免费 / 无密钥 / 可程序化取) + + + +二 · 平台矩阵(海外 6 + 国内 6) + + + +三 · 判断层:一套口径管 12 个平台 + + + +四 · P2 四块 + 下游 + + + + + +海外 · 搜索趋势(主源) +Google Trends RSS · geo=US/GB/JP +title / ht:approx_traffic / pubDate +实跑 200 · 10 条 / 地区 + + + + +海外 · 社区热榜 +Reddit /r/popular/hot/.rss · 25 条 +title / author / label / content +⚠ .json 端点 403 ⇒ 只走 .rss + + + + +海外 · 账号侧(对标号) +YouTube 频道 RSS · 15 条 +videoId / title / published / views +对标账号监控的海外实现 + + + + +海外 · 科技 / 百科 / 新闻 +HN topstories + Wikipedia Top +Google News RSS + BBC News +trends24 供 X 趋势(HTML) + + + + +国内 · 主源(沿用) +60s v2:weibo / douyin / zhihu +toutiao / rednote / baidu/hot +返回 {title, hot, url} + + + + +国内 · 备源(沿用) +xxapi v2:weibohot / douyinhot +bilibilihot / baiduhot +60s 挂时顶上(B站主用它) + + + + + +海外 6(本次新增) +平台名 · 内容形态 · 发布方式 +TikTok · 短视频/图文 · 发=API 需过审核 +YouTube · 长视频+Shorts · 发=Data API +Instagram · Reels/图文 · 发=Graph API +Facebook · Reels/长视频 · 发=Graph API +X · 短视频/图文 · 发=API(按量计费) +LinkedIn · 短视频/图文 · 发=API 门槛高 +⚠ 站内实时热榜无免费源 ⇒ 人工 / 待授权 +可用的是「搜索趋势 + 社区热榜」这两路 + + + + +国内 6(沿用,本次只对齐口径) +平台名 · 内容形态 · 发布方式 +抖音 · 短视频/图文 · 发=开放平台 +快手 · 短视频/直播 · 发=开放平台 +小红书 · 图文/视频 · 发=人工为主 +视频号 · 短视频/直播 · 发=人工 +B站 · 中长视频/竖屏 · 发=开放平台 +微博 · 视频/图文 · 发=开放平台 +⚠ 小红书 / 视频号 没有通用发布 API +产品按「人工发布 + 回填链接」设计 + + + +体量口径:播放 / 互动 / 搜索 / 榜内排名 +各平台独立归一化,⛔ 不相加成一个数 + + + + +① 归一化 · 热度指数 0–100 +H = 100 × PercentileRank(ln(1+x)) +只有排名:H = 100 × (1 − (r−1)/(N−1)) +三种情况:有热度值 / 只有排名 / 都没有 +百分位是「同平台同榜单内」的相对位置 +都没有 ⇒ 标「热度未知」,⛔ 不编数 +样本:30 天算分布 · 7 天做校准 + + + +② 趋势 +T30 = H(t) − H(t−30m) +两个窗口:30 分抓上升 · 24 时看发酵 +2 小时更新的源,⛔ 不许伪装成 30 分钟有数 +拿 3 个采样点的中位数去单次抖动 + + + +③ 去重归并(全球口径新增一步) +标题相似度 + 关键词 + 时间窗 → 候选 +⚠ 先按「地区 / 语言」分桶再比 +跨语言不直接比标题,低置信度交人确认 +各平台热度独立保留,⛔ 不相加 + + + +④ 分类 + 价值分 +L1 领域 / L2 事件类型 +L3 适配人设 / L4 工作状态 +V = 10 × Σ(wᵢ · sᵢ) w = 25/20/15/15/10/10/5 +≥6 维有据才出正式分,否则「待评估」 +三档:≥70 做 | 50–69 改角度 | <50 不投入 +置信度按数据完整性单算,与价值分分开 +适配人设最多推 3 个,用户可增删 + + + +⑤ 风险与过期(硬闸) +风险高直接拦截,⛔ 不被高分抵消 +来源过期 ⇒ 不显示「值得关注」 +超 2 个更新周期 ⇒ 标「可能已过期」 + + + + +对标监控概览 +四个数:监控账号 / 低粉爆款 +异常值条数 / 近三天更新条数 +补:来源新鲜度 · 覆盖率 95/80 +最近成功时间 / 失败原因 +海外 / 国内 分组显示 + + + +对标内容 +摆法:表格列表 + 右侧详情抽屉 +倍数=本条播放 ÷ 近 30 天中位数 +同类型、样本 ≥10,否则「样本不足」 +异常值 ≥3.0 · 低粉爆款 ≥2.0 且粉 <1 万 +拿不到播放 ⇒ 改用互动并注明口径 + + + +评论区洞察 +可点入子区 +按点赞最多取前 N 条评论 +出 AI 候选选题,一出即成 Topic +海外侧同源:Reddit / HN 帖下讨论 +去重按评论标识,不按文本 + + + +选题库 +进度 × 类型两维;来源必填 +价值分 + 置信度分开显示 +热点 ↔ 选题多对多 +「收藏热点」≠「生成选题」两个动作 +目标平台:从 12 个里选,海外国内分组 + + + +下游 +创作台 P4 · 资产库 P3 +复盘台 P7 · 矩阵总览 P1 +发布后 2h / 24h / 7d 回收表现 +回校七维权重(见左侧虚线) + + + +LEGEND + +产品板块 + +判断层 + +国内口径(沿用) + +本次新增(海外侧) + +数据流 + +复盘回写 + +本次新增链路 + +转创作 + + +
+
+

01 · 源与平台

+

12 个平台,但只有 3 类取数能力

+
    +
  • 海外 6:TikTok / YouTube(Shorts)/ Instagram(Reels)/ Facebook / X / LinkedIn
  • +
  • 国内 6:抖音 / 快手 / 小红书 / 视频号 / B站 / 微博
  • +
  • 能自动取热榜又能自动发布的只有 YouTube 一个;其余取得到、发不了
  • +
  • 站内实时热榜没有免费源 ⇒ 留人工录入位子,⛔ 不假装有
  • +
+
+
+

02 · 全球口径真正变了什么

+

三处改,其余照旧

+
    +
  • 平台的「地区 / 语言」成了必填标记,去重前先分桶
  • +
  • 跨语言不直接比标题相似度 —— 中英标题拼一起算相似度会乱归并
  • +
  • 热度归一化仍是同一套公式,各平台各算各的,⛔ 不跨平台相加
  • +
  • 页面 7 / 导航 / 板块 39 / 流转 20 / 对象 11 —— 一个都没动
  • +
+
+
+

03 · 画图的取舍

+

把 12 个平台摊开,不叠成图标

+
    +
  • 每个平台一行,带内容形态与发布方式 —— 只写名字等于没写
  • +
  • 海外那半用珊瑚色标出来,跟沿用的国内那半一眼分得开
  • +
  • 公式和阈值留在图里,方便对着图核产品实现
  • +
  • 图外的清单与查证过程在同目录两份 md 里
  • +
+
+
+ +
+ 热点与选题 · 产品框图(全球版)· 2026-10-11 + 画法:product-planning 自带 diagram-design(Architecture · doc-wide)· 皮肤=默认,未定制品牌 · 来源:本目标两份 md + 上一版框图 +
+
+ + diff --git a/docs/pm/mcn-shortvideo-agent/专题/全球平台矩阵.md b/docs/pm/mcn-shortvideo-agent/专题/全球平台矩阵.md new file mode 100644 index 0000000..7797bce --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/全球平台矩阵.md @@ -0,0 +1,152 @@ +# 全球平台矩阵(12 个) + +> 目标:按全球口径重做平台矩阵与热点源含海外主流。类别 `产品规划`。 +> 起点是上一目标(`8a649c`)那份 `热点与选题-功能细节-2026-10-11.md` —— 它写对了,但只按国内口径。本份在它之上把平台范围从国内扩到全球,**不推翻它**。 +> 本文只做一件事:把 12 个平台一个个写清「内容形态 / 体量口径 / 发布方式」,让后面画图和做产品的人照着就能落地。 + +--- + +## 〇、口径变了什么 + +用户 2026-10-11 18:53 逐字: + +> 「所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)」 + +实测上一份的偏差:抖音 12 次、知乎 8 次、微博 7 次、小红书 4 次、B站 4 次 —— **海外平台 0 次**。 + +本份按「海外 6 + 国内 6 = 12」写。下面这份 12 平台清单是主会话自决的,**可以推翻**:要补更主流的漏项就在 §三 提,⛔ 不擅自换掉已有那 6 个。 + +--- + +## 一、海外 6 + +### 1. TikTok + +- **内容形态**:短视频为主(竖屏,主流 15–60 秒,单条上限 10 分钟);另有图文轮播(Photo Mode)。 +- **体量口径**:播放量、点赞、评论、分享、完播率;话题页的 `#hashtag` 累计播放数。 +- **发布方式**:有官方 Content Posting API,但**门槛高**。要注册应用 → 加 Content Posting API 产品 → 打开 Direct Post → 申请 `video.publish` scope → 用户逐账号授权 → **再过一次审核**。没通过审核时,发出去的内容**只能是自己可见(SELF_ONLY)**,而且未审核客户端 24 小时内最多 5 个用户能发。→ 未审核阶段等于发了个寂寞,产品上按「人工发布 + 记录链接」设计。 + +### 2. YouTube(含 Shorts) + +- **内容形态**:长视频(横屏,可超 10 分钟)+ Shorts(竖屏,≤3 分钟)+ 直播。 +- **体量口径**:播放量、观看时长、点赞评论、订阅转化;「热门」榜(`chart=mostPopular`)按地区给。 +- **发布方式**:官方 Data API v3 可上传视频,要 OAuth 2.0 + 配额(单次上传约 1600 单位,默认日配额 10000);Shorts 走同一接口。→ **有 API 可发,但配额紧**,批量发布要提前申请提额。 + +### 3. Instagram(含 Reels) + +- **内容形态**:Reels 短视频、Feed 图文与轮播、Stories(24 小时)。 +- **体量口径**:播放量、触达、互动(点赞/评论/保存/分享);Reels 单列播放。 +- **发布方式**:官方 Graph API 可发,前提是账号为 Business 或 Creator 并绑定 Facebook 主页,权限要过审。→ 个人号⛔ 走不通,实务上多为人工。 + +### 4. Facebook + +- **内容形态**:Reels 短视频、长视频、图文、直播。 +- **体量口径**:播放、触达、互动。 +- **发布方式**:Graph API 可发(Page 身份 + 权限审核)。个人主页发帖的能力已被官方收回,只剩 Page。 + +### 5. X(原 Twitter) + +- **内容形态**:短视频(单条 ≤2 分 20 秒)、图文、长文(Premium)。 +- **体量口径**:曝光量、点赞、转帖、回复;趋势榜(Trends,按地区取)。 +- **发布方式**:官方 API v2 可发,**但是付费的**。2026 年起对新开发者取消 Free/Basic/Pro 分档,改按量计费:发一条帖 $0.015、带链接 $0.20、读一条帖 $0.005。→ 这条路是**唯一一条明确要花钱**的,产品上要么预算留出来,要么归到人工。 + +### 6. LinkedIn + +- **内容形态**:短视频、图文、长文(Article)、文档轮播。 +- **体量口径**:曝光、互动、点击。 +- **发布方式**:官方 API 要过 Marketing Developer Platform 审批,门槛高、周期长。→ 产品里按人工处理。 + +--- + +## 二、国内 6 + +### 7. 抖音 + +- **内容形态**:短视频、图文。 +- **体量口径**:播放、点赞、评论、分享、完播率。 +- **发布方式**:开放平台有「视频发布」能力,需企业主体 + 权限审核;个人号多人工。 + +### 8. 快手 + +- **内容形态**:短视频、直播。 +- **体量口径**:播放、互动。 +- **发布方式**:开放平台有内容发布接口,需审核。 + +### 9. 小红书 + +- **内容形态**:图文笔记、视频笔记。 +- **体量口径**:曝光、点赞、收藏、评论。 +- **发布方式**:**没有通用的开放发布 API**(蒲公英、企业号那套是另一回事)→ 人工为主。 + +### 10. 视频号 + +- **内容形态**:短视频、直播。 +- **体量口径**:播放、点赞、转发。 +- **发布方式**:微信生态内没有公开发布 API → 人工。 + +### 11. B站 + +- **内容形态**:中长视频、竖屏短视频、专栏。 +- **体量口径**:播放、弹幕、点赞投币收藏。 +- **发布方式**:开放平台有「稿件投递」接口,需申请;也可网页上传。 + +### 12. 微博 + +- **内容形态**:视频、图文、长文。 +- **体量口径**:阅读量、转发、评论、点赞。 +- **发布方式**:开放平台 `statuses/share` 等接口可发,需 App Key + 审核。 + +--- + +## 三、建议增补(只提建议,⛔ 不动上面 12 个) + +下面这 5 个是「比现役 12 个里某些平台更主流、但这次没进」的候选。按用户授意写清理由,**采不采由用户定**。 + +| 候选 | 内容形态 | 为什么建议增补 | 权衡 | +|---|---|---|---| +| **Threads** | 图文+短视频 | Meta 对 Instagram 的替代品,增长快,图文生态跟小红书最像,出海内容可复用 | 开放 API 早期、能力有限 | +| **Reddit** | 图文+短视频+长讨论 | 海外做「评论与需求信号」最好的地方,而且是**这次唯一一个免费无密钥能程序化取的社区热榜**(见热点源那份) | 偏社区文化,短视频不是主体 | +| **Pinterest** | 图文+短视频(Idea Pin) | 海外「搜索型」流量入口,美妆/家居/穿搭类选题的刚需 | 跟短视频矩阵主线偏得远 | +| **Snapchat** | 短视频(Spotlight) | 北美年轻人渗透率高 | 开放发布能力弱,区域性强 | +| **Kwai** | 短视频 | 快手海外版,拉美/中东市场的主力,跟 TikTok 是两条不同的出海路 | 与 TikTok 高度重叠,除非主攻拉美 | + +**倾向(可推翻)**:先加 **Reddit**(唯一理由最强:它同时是平台又是免费热点源)。其余四个等出海地区定了再说 —— 现在加进来只是清单变长,落不了地。 + +--- + +## 四、12 个平台怎么进链路 + +矩阵排完了不等于产品能做。进链路时按「取数能力」分三类,这三类决定产品上按钮怎么摆: + +1. **能自动取热榜 + 能自动发布**:YouTube(RSS 可读、Data API 可发)。→ 可做全自动。 +2. **能自动取、不能自动发**:其余 11 个。→ 选题与评估自动,发布归人工,产品只需给「一键跳转发布页 + 回填链接」。 +3. **取和发都要人工**:视频号、小红书(发布侧)。→ 只做人工录入 + 链接回填。 + +一句话落到产品上:**这 12 个平台的差别不在「能不能看见」,在「能不能发」**。所以平台矩阵必须带 `发布方式` 这一列,否则做出来的产品会在发布环节全线卡住。 + +--- + +## 五、与 2a / 2b 同步的建议(⛔ 本轮不动手,交用户裁) + +现版 `2a`/`2b`/原型 `ui/mcn-workbench.html` 里都没有 12 平台矩阵。**要不要同步进去、同步到哪几节,是用户拍板的事**,本轮一个字没改。建议如下,供裁: + +1. `2a` 的 `Account`(内容账号)与平台账号块 —— 平台账号的「平台」字段应是**下拉选 12 个之一**,不是自由文本。要改的是那个枚举值清单。 +2. `2a` F1(对标账号监控)与热榜来源 —— 加一节「支持的平台清单」,就是本文这 12 个。 +3. `2b` §五 P2 选题雷达 —— 平台筛选器从「全部平台」展开时列 12 个,按「海外 6 / 国内 6」两组分。 +4. 页面数、导航名与顺序、板块 39、流转 20 条、对象 11 个 —— **⛔ 一个都不动**。上面三条都是改字段取值与分组,不改结构。 + +--- + +## 六、说人话自评 + +**评分:46/50**(门槛 45)—— 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9。判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`。 + +一处保留的「不像人话」:§三 那张表里「权衡」一列写得短,读起来像标签。留着是因为它承的是「为什么不加」这个判断,展开会淹掉主表。 + +--- + +## 附:平台能力口径的来源 + +- TikTok `video.publish` 的审核墙、未审核只能 SELF_ONLY、24 小时 5 用户上限:2026-10-11 联网查证(TikTok 官方开发者文档与多篇 2026 年实测文)。 +- X API 2026 年改为按量计费(发帖 $0.015 / 带链接 $0.20 / 读帖 $0.005):2026-10-11 联网查证。 +- 其余平台的形态、口径、发布方式:按各家官方文档与公开资料整理,**本轮没有逐项实跑验通**。要落到产品里之前,这几条建议按平台再确认一次权限门槛。 diff --git a/docs/pm/mcn-shortvideo-agent/专题/功能流程图-热点到选题-全球版.html b/docs/pm/mcn-shortvideo-agent/专题/功能流程图-热点到选题-全球版.html new file mode 100644 index 0000000..885d9b3 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/功能流程图-热点到选题-全球版.html @@ -0,0 +1,206 @@ + + + + + +功能流程图 · 热点到选题(全球版) + + + + +
+

功能流程图 · diagram-design · Flowchart · doc-wide · 全球口径

+

热点到选题 · 功能流程图(全球版:一条热点进来走哪几步)

+

采集到落地五步,第六步是判断关口,三条出口各带自己的阈值。全球口径只改了两处:采集拆成海外与国内两路,去重归并前先按地区与语言分桶。其余步骤、公式、阈值跟上一版一模一样。

+ + 热点到选题功能流程图(全球版):双路采集、热度与趋势、按语言分桶去重、分类、价值分、决策与三条出口 + 横向流程五步:采集(海外九源与国内两源双路)、热度指数与趋势、去重归并(先按地区与语言分桶)、分类、价值分与置信度,一起汇入决策关口。决策按 70 分与 50 分两档分出建议做、改角度、不建议投入三条出口。左下一处注解写明全球口径改动只有采集分路与去重分桶两处。 + + + + + + + + + + + + + + + + + + + + +① 采集 · 双路 +海外路(9 源,本次新增) +Google Trends · Reddit · YouTube +HN · PH · Wiki · GNews · BBC +国内路:60s v2(主)→ xxapi(备) +主源 → 备源 → 人工录入 三级退 +失败退旧值并标「这个源取不到」 +站内热榜无免费源 ⇒ 人工补 + + + +② 热度指数与趋势 +H = 100 × PercentileRank(ln(1+x)) +只有排名:H = 100(1 − (r−1)/(N−1)) +T30 = H(t) − H(t−30m) +两个窗口:30 分 / 24 时 +12 个平台同一套公式,各算各的 +⛔ 不跨平台相加成一个热度 +旧源不许伪装成 30 分钟有新数 + + + +③ 去重归并 +标题相似度 + 关键词 + 时间窗 +⚠ 先按「地区 / 语言」分桶再比 +跨语言不直接比标题相似度 +先出候选,AI 判是否同一事件 +低置信度归并交用户确认 +各平台热度独立保留,不相加 +同事件跨地区 ⇒ 合并成一条热点 + + + +④ 分类 +L1 领域 / L2 事件类型 +L3 适配人设 / L4 工作状态 +领域最多 3 标签 · 事件 1 主 2 辅 +适配人设最多推 3 个,可增删 +置信度 <0.7 标「待确认」 +L4 由工作流事件自动改,⛔ 不猜 +首版不做三级以上行业树 + + + +⑤ 价值分+置信度 +V = 10 × Σ(wᵢ · sᵢ) +w = 25/20/15/15/10/10/5 +≥6 维有据才出正式分 +合规维反向评分 +风险高直接拦截,不靠高分抵 +置信度按数据完整性单算 +缺数据 ⇒ 「待评估」,⛔ 不填中位 + + + + +本次新增(全球口径) +① 采集拆成海外 / 国内两路;③ 去重前先按「地区 + 语言」分桶。 +其余步骤、公式、阈值、三条出口 —— 与国内口径完全一致。 + + + + +⑥ 决策:这条值不值得做 +价值分 × 热度 × 时效 +≥70 / 50–69 / <50 + + + + +建议做 +≥ 70 分,且无硬性风险 +直接排期进制作 + + + +改角度 +50–69 分 +调角度 / 补证据再评估 + + + +不建议投入 +低于 50 分 +降级展示,不进优先队列 + + + +≥ 70 + +50–69 + +< 50 + + + +LEGEND + +处理步骤 + +判断关口 + +终态出口 + +决策分支 + +本次新增 / 改动处 + + +
+
+

A · 到第 5 步为止的硬口径

+

能算的数,不留「感觉」

+
    +
  • 热度指数用同平台同榜单的百分位,不拿原始热度值硬比
  • +
  • 只有排名时用榜内位置换算,第 1 名 100、末名 0
  • +
  • 倍数=本条播放 ÷ 近 30 天同类型中位数,样本 <10 显示「样本不足」
  • +
  • 趋势用 30 分钟窗口;旧来源不许伪装成有新数据
  • +
  • 海外源的时间戳多为 UTC / 美西,入库统一转 UTC 再比
  • +
+
+
+

B · 第 6 步这个关口

+

热度高 ≠ 该做

+
    +
  • 价值分七维加权:账号匹配 25%、流量 20%、差异化 15%、时效 15%、变现 10%、制作 10%、合规 5%
  • +
  • 合规那一维反向评分;硬风险直接拦,不被高分抵消
  • +
  • 置信度按数据完整性单算,与价值分分开显示
  • +
  • 数据过期一律不显示「值得关注」,哪怕上次分数很高
  • +
+
+
+

C · 全球口径下最容易踩的坑

+

中英标题放一起比相似度

+
    +
  • 中文标题与英文标题做字符相似度算出来的分没有意义,会把两条无关热点并成一条
  • +
  • 所以第 3 步必须先在「地区 + 语言」这一层分桶,桶内再比
  • +
  • 同一事件真的跨地区出现时,按事件合并、热度分列,⛔ 不加总
  • +
  • 海外侧的站内热榜取不到 ⇒ 该平台那一路直接走人工录入,不留空壳
  • +
+
+
+ +
+ 热点到选题 · 功能流程图(全球版)· 2026-10-11 + 画法:product-planning 自带 diagram-design(Flowchart · doc-wide)· 皮肤=默认,未定制品牌 · 口径来源:本目标两份 md + 上一版流程图 +
+
+ + diff --git a/docs/pm/mcn-shortvideo-agent/专题/海外热点源-查证.md b/docs/pm/mcn-shortvideo-agent/专题/海外热点源-查证.md new file mode 100644 index 0000000..e230a9a --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/海外热点源-查证.md @@ -0,0 +1,247 @@ +# 海外主流热点源(查证版) + +> 目标:按全球口径重做平台矩阵与热点源含海外主流。类别 `产品规划`。 +> 国内那路上一轮已有(`目标-逆向Easel热点雷达与选题链路补齐现版-547748/取证/skills__shared__hotlist-apis.md`:60s v2 主源 + xxapi 备选,免费无密钥)。 +> 本份只做海外那路:把「免费 / 无密钥 / 能程序化取」的源一条条**实跑验过**再写下来。 +> ⛔ 没验通的一律写「没拿到」,不编端点、不拿「应该可以」顶替、不把付费的写成免费。 + +--- + +## 〇、验证方式(照这个就能复核) + +- **取数时间**:2026-10-11 19:19–19:21(本地时间;UTC 11:21)。 +- **取数环境**:本机 curl → 本机代理 `http://127.0.0.1:10800`(系统 PAC 在同一端口,直连海外域名会连不通)。 +- **命令形状**: + +``` +curl -s -m 25 -x http://127.0.0.1:10800 \ + -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/120 Safari/537.36" \ + -o <取证文件> -w "http=%{http_code} bytes=%{size_download}\n" "<端点>" +``` + +- **原始报文**全部落在同目录 `取证/` 下,文件名与端点一一对应,可逐个复核。 +- **判通过的硬条件**:HTTP 200 + 报文里能解析出**真实条目**(不是空壳、不是验证码页)。三个条件缺一个就不写进「已验通」。 + +--- + +## 一、结论速览 + +**已验通 9 条**(全部免费、无密钥、能程序化取): + +1. Google Trends 每日搜索趋势 RSS(按国家/地区) +2. Reddit 公开热榜 Atom RSS +3. YouTube 频道 Atom RSS +4. Hacker News 官方 Firebase API +5. Product Hunt Atom Feed +6. Wikipedia 页面浏览 Top API +7. Google News RSS +8. BBC News RSS +9. trends24.in(X 趋势镜像,HTML 抓取) + +**没拿到 6 条**(写清卡在哪,⛔ 不绕): + +1. Reddit 的 JSON 端点 —— 403 +2. TikTok Creative Center —— 要授权,返回 `no permission` +3. YouTube 官方热门榜 —— 要 API key(免费但要申请,不算「无密钥」) +4. X 官方趋势接口 —— 按量计费 +5. Instagram / Facebook / LinkedIn 趋势 —— 没有免费公开源 +6. PullPush(Reddit 归档 API)—— 429,明确是付费墙 + +一句话:**海外这路能自动取到「大家在搜什么、社区在聊什么、什么新闻在发酵」,但取不到「短视频平台站内的实时热榜」** —— TikTok / Instagram 这类站内榜单没有免费无密钥入口。这条缺口要在产品上留一个「人工录入」的位子(跟国内那路一个做法)。 + +--- + +## 二、已验通的 9 条 + +### 1. Google Trends 每日搜索趋势 RSS —— 主源 + +- **端点**:`https://trends.google.com/trending/rss?geo=US`(`geo` 换国家码:`US` / `GB` / `JP` … 本轮三个都验过,全部 200)。 +- **字段**:`` 搜索词、`<ht:approx_traffic>` 大致搜索量、`<pubDate>` 时间、`<ht:news_item>` 关联新闻(含标题与来源)。返回 **10 条**。 +- **实测样例**(US,2026-10-11 19:21 取): + +``` +<title>pope leo +200+ +Sun, 11 Oct 2026 04:00:00 -0700 +``` + + GB 首条 `singapore weather`(500+)、JP 首条 `森脇健児`(500+)。 +- **成本 / 授权**:免费、无密钥、无需注册。 +- **建议刷新频率**:**每 1 小时**。这份榜单本身是按天滚动的,拉太勤没有新东西。 + +### 2. Reddit 公开热榜 Atom RSS —— 主源(海外社区热榜) + +- **端点**:`https://www.reddit.com/r/popular/hot/.rss`(另有 `https://www.reddit.com/r/all/top/.rss?t=day`,本轮也 200)。返回 **25 条**。 +- **字段**:`` 帖标题、`<author><name>` 发帖人、`<category term="..." label="r/子版">` 所属社区、`<content type="html">` 正文摘要、`<link>` 原帖链接。 +- **实测样例**(首条,2026-10-11 19:21 取): + +``` +<author><name>/u/Chinesemperor</name></author> +<category term="memes" label="r/memes"/> +<title>Why can’t they ? +``` + +- **成本 / 授权**:免费、无密钥。 +- **要点**:**必须走 `.rss`,⛔ 别走 `.json`** —— `.json` 实测 403(报文已存 `取证/REDDIT-JSON-403.json`,是个 190 KB 的拦截页,不是数据)。 +- **建议刷新频率**:**每 30 分钟**。`hot` 榜滚动快。 + +### 3. YouTube 频道 Atom RSS —— 补「账号侧」 + +- **端点**:`https://www.youtube.com/feeds/videos.xml?channel_id=<频道ID>`。返回 **15 条**。 +- **字段**:``、``、`<published>`、`<media:description>`、`<media:statistics views=...>`。 +- **实测样例**(首条,2026-10-11 19:21 取): + +``` +<yt:videoId>IBVmenOroPs</yt:videoId> +<title>Order in any language with Gemini 3.5 Live Translate +``` + +- **成本 / 授权**:免费、无密钥。 +- **定位**:**这是「对标账号」那一路的海外实现**,不是热门榜。想让海外的对标号监控跑起来,靠的就是它。 +- **建议刷新频率**:**每 30 分钟**。 + +### 4. Hacker News 官方 Firebase API —— 科技向 + +- **端点**:`https://hacker-news.firebaseio.com/v0/topstories.json`。返回 **500 个 id**(首 5 个:`50041540, 50041682, 50040276, 50041765, 50037949`)。 +- **字段**:数组只有 id;逐条用 `https://hacker-news.firebaseio.com/v0/item/.json` 取 `title` / `score` / `url` / `time` / `by`。 +- **成本 / 授权**:免费、无密钥、官方。 +- **建议刷新频率**:**每 15 分钟**(榜单本身秒级变,但选题用不着这么勤)。 + +### 5. Product Hunt Atom Feed —— 新产品 + +- **端点**:`https://www.producthunt.com/feed`。返回 **50 条**。 +- **字段**:`` 产品名、`<link>`、`<published>`、`<content>` 简介。 +- **实测样例**(2026-10-11 19:21 取):`kōdlo` / `HireKey` / `Pickle Sensei` / `Automations in Perplexity Computer`。 +- **成本 / 授权**:免费、无密钥。 +- **建议刷新频率**:**每日 1 次**(一天一批产品)。 + +### 6. Wikipedia 页面浏览 Top API —— 热度硬指标 + +- **端点**:`https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikipedia/all-access/2026/10/09`(路径末尾是日期,只能取**已经过去的某一天**)。返回 **1000 条**。 +- **字段**:`article` 词条、`views` 浏览量、`rank` 排名。 +- **实测样例**(2026-10-09 数据):`(1, Main_Page, 6428873)`、`(2, Special:Search, 857711)`、`(3, Nidal_Hasan, 787247)`。 +- **成本 / 授权**:免费、无密钥、官方。 +- **注意**:前两名永远是 `Main_Page` / `Special:Search`,解析时要按固定名单剔掉,⛔ 别把它们当热点。 +- **建议刷新频率**:**每日 1 次**(受数据源限制,取 D-1 的数据)。 + +### 7. Google News RSS —— 新闻广度 + +- **端点**:`https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en`。返回 **38 条**。 +- **字段**:`<title>`(标题 + 来源,用 ` - ` 分隔)、`<link>`、`<pubDate>`、`<source>`。 +- **实测样例**:`World condemns deadly Houthi attack on Saudi Arabia's Riyadh airport - Al Jazeera`。 +- **成本 / 授权**:免费、无密钥。 +- **建议刷新频率**:**每 30 分钟**。 + +### 8. BBC News RSS —— 新闻兜底 + +- **端点**:`https://feeds.bbci.co.uk/news/rss.xml`。返回 **26 条**。 +- **字段**:`<title>`、`<link>`、`<pubDate>`、`<description>`。 +- **成本 / 授权**:免费、无密钥。 +- **定位**:域外新闻的**兜底源**。Google News 挂了它顶上。 +- **建议刷新频率**:**每 30 分钟**。 + +### 9. trends24.in —— X 趋势镜像(HTML) + +- **端点**:`https://trends24.in/united-states/`。返回 260 KB HTML。 +- **提取方式**:抓 `class=trend-link` 的 `<a>` 文本。实测命中 **1214 条**(含多个时间快照),前 12 条:`Good Sunday / Bama / Kentucky / Georgia / Stein / Shane Gillis / Kiffin / Tyler Simmons / Penta / Dijon Lee / Slinky / Dawgs`。 +- **成本 / 授权**:免费、无需密钥。 +- **⚠️ 定位说明**:这是**第三方镜像站,不是 X 官方**。它是 HTML 抓取,页面改版就会失效,而且**抓不了历史**。 +- **建议刷新频率**:**每 30 分钟**,并且必须配「解析失败告警」—— 解析出 0 条就说明对方改版了,要当故障报,⛔ 不能当「今天没热点」。 + +--- + +## 三、没拿到的 6 条(写清卡在哪) + +| 源 | 实测结果 | 卡在哪 | 结论 | +|---|---|---|---| +| Reddit `.json` 端点 | `http=403`,回的是 190 KB 拦截页 | 平台对非浏览器/IP 的封锁 | ⛔ 不用,改走 `.rss`(已验证) | +| TikTok Creative Center | `http=200`,正文 `{"code":40101,"msg":"no permission"}` | 需登录态 / 商业授权 | ⛔ **不是免费源**,别写进清单 | +| YouTube 官方热门榜(`videos?chart=mostPopular`) | 未取到 | 需 Data API v3 key(免费但要注册申请) | ⚠️ 严格说不满足「无密钥」。要用就得先申 key | +| X 官方趋势接口 | 未取到 | 2026 年起按量计费(读帖 $0.005/条,趋势查询单列) | ⛔ **要花钱**,只做备选 | +| Instagram / Facebook / LinkedIn 趋势 | 未取到 | 三家都没有免费公开的趋势入口 | ⛔ **查不到**,站内热榜只能人工 | +| PullPush(Reddit 归档) | `http=429`,正文写「不提供免费抓取资源」 | 付费墙 | ⛔ 付费,不用 | + +另外两条试过但连不通的:`rsshub.app` 公共实例(`http=000`)、`api.rss2json.com`(`http=000`)。这两个是**本机网络连不通**,不是源本身的问题,所以不判它们「不能用」—— 换个网络环境值得再试。 + +--- + +## 四、降级链(主源挂了走谁) + +跟国内那路同一套三级写法,海外这路按「按用途分组」而不是「按平台分组」: + +``` +搜索趋势 Google Trends RSS (US/GB/JP…) + └─ 挂了 ⇒ 换 geo 试(同源换地区,不算降级) + └─ 仍挂 ⇒ 落 L3 人工录入 + +社区热榜 Reddit /r/popular/hot/.rss + └─ 挂了 ⇒ Reddit /r/all/top/.rss?t=day(同平台另一榜) + └─ 仍挂 ⇒ Hacker News(覆盖科技向) + +新闻广度 Google News RSS + └─ 挂了 ⇒ BBC News RSS + └─ 仍挂 ⇒ 落 L3 人工录入 + +短视频/图片站内热榜 + 无免费无密钥源 ⇒ 直接落 L3 人工录入(TikTok / Instagram / Facebook / LinkedIn) +``` + +三级本身沿用上一份的 L1 / L2 / L3:**L1 官方接口**(Google Trends / Reddit / HN / Wikipedia 都属于这级)→ **L2 经许可的第三方聚合**(trends24 属这级,它是镜像站)→ **L3 人工录入**(站内热榜走这条)。 + +**一条硬规则(照抄国内那路的写法)**:某个源断了,已收藏的热点、已有选题、生产任务**照常工作**。来源故障只影响「新增」,不影响存量。 + +--- + +## 五、刷新频率与覆盖率告警 + +跟国内那路同一套监控口径,海外这路加两条自己的: + +| 源 | 建议频率 | 过期判定 | +|---|---|---| +| Google Trends RSS | 1 小时 | 超 2 个周期(2 小时)无新数据 ⇒ 标「数据可能已过期」 | +| Reddit RSS | 30 分钟 | 超 1 小时 ⇒ 过期 | +| YouTube 频道 RSS | 30 分钟 | 超 1 小时 ⇒ 过期;频道本身不更新属正常,要区分「源挂了」和「号没发」 | +| Hacker News | 15 分钟 | 超 30 分钟 ⇒ 过期 | +| Product Hunt | 1 天 | 超 2 天 ⇒ 过期 | +| Wikipedia Top | 1 天 | 只能取 D-1,取不到 D-1 ⇒ 过期 | +| Google News / BBC | 30 分钟 | 超 1 小时 ⇒ 过期 | +| trends24 | 30 分钟 | **解析出 0 条 ⇒ 直接报故障**(页面改版),不是过期 | + +- **成功率算法(与国内同款)**:成功率 = 成功采集次数 ÷ 计划采集次数 × 100%。≥95% 正常;80–95% 警告;<80% 异常,**暂停把它当实时信号**。 +- **时区**:海外源的时间戳多为 UTC 或美西(`-0700`),入库统一转 UTC 存,展示按运营所在时区。⛔ 别拿本地时间直接跟源时间比,那会算出负的间隔。 + +--- + +## 六、和国内那路怎么合流 + +两条路**在「统一热点数据模型」那一层合流,⛔ 不合并成一个榜单**: + +- 国内:60s v2 主源(`/v2/weibo`、`/v2/douyin`、`/v2/zhihu`、`/v2/toutiao`、`/v2/rednote`、`/v2/baidu/hot`)→ 备源 xxapi v2(`/api/weibohot`、`/api/douyinhot`、`/api/bilibilihot`、`/api/baiduhot`)。 +- 海外:本文这 9 条。 +- 合流后的每条热点必须带 **`地区`(海外 / 国内)+ `语言`** 两个标记 —— 去重归并那一步靠它们分桶,跨语言不直接比标题相似度(详见同目录流程图那份)。 + +--- + +## 七、说人话自评 + +**评分:47/50**(门槛 45)—— 直接性 9 / 节奏 9 / 信任度 10 / 真实性 10 / 精炼度 9。判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`。 + +为什么「真实性」给满分:这一份里每一条「已验通」都附了端点、取数时间与原始报文落盘路径,每一条「没拿到」都写了实测返回码和它说了什么。没有一条是靠推断写上去的。 + +--- + +## 附:取证文件清单(同目录 `取证/`) + +| 文件 | 对应端点 | 结果 | +|---|---|---| +| `gtrends-US.xml` / `gtrends-GB.xml` / `gtrends-JP.xml` | Google Trends RSS 三个地区 | 200 | +| `reddit-popular-hot.xml` | Reddit r/popular/hot/.rss | 200 | +| `yt-channel-rss.xml` | YouTube 频道 RSS(Google for Developers 频道) | 200 | +| `hn-topstories.json` | Hacker News topstories | 200 | +| `producthunt-feed.xml` | Product Hunt feed | 200 | +| `wikipedia-top.json` | Wikipedia Top(2026-10-09) | 200 | +| `googlenews-US.xml` | Google News RSS | 200 | +| `bbc-news.xml` | BBC News RSS | 200 | +| `trends24-us.html` | trends24 美国页 | 200 | +| `REDDIT-JSON-403.json` | Reddit `.json`(反例) | 403 | +| `TIKTOK-CC-noperm.json` | TikTok Creative Center(反例) | 200 但 `no permission` | diff --git a/docs/pm/mcn-shortvideo-agent/专题/热点与选题-功能细节.md b/docs/pm/mcn-shortvideo-agent/专题/热点与选题-功能细节.md new file mode 100644 index 0000000..7fbb4c6 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/热点与选题-功能细节.md @@ -0,0 +1,546 @@ +# 热点与选题 · 功能细节(照着能做出来的那一版) + +> 用户 2026-10-11 逐字批评:「**框图中没有细节,热点从哪里来,根据什么分类,怎么体现热度,如何展示这些细节都没有,做出来的产品也是一个架子没有细节**」。 +> 用户追加令:「**不光是我说的这些 带着问题问问 gpt在做判断**」。 +> 本文件就是把那四问补到「照着能做出来」的粒度,作为下一步重画框图与流程图的依据。 + +--- + +## 〇、这份文档怎么读 + +**三色标注,一条都不混:** + +- 【GPT】= 外部模型(ChatGPT 网页版)给的判断,括号里注它在回复里的位置(如「问题1·1.1」)。逐字原文见同目录 `GPT-对热点与选题板块细节的建议.md`。 +- 【补】= 我补的 —— 多半是把 GPT 的话落到现版的具体字段和口径上,或者拿现版已有的约定去收口。 +- 【现版】= 现版产品里already写着的东西,引用 `2a`/`2b` 的具体位置。 + +**两条硬边界(先说清,免得越画越大):** + +1. **本轮只补细节 + 重画图,⛔ 不改产品。** 页面 7 个、导航名与顺序、板块 39 块、流转 20 条、对象 11 个 —— 一个都不动。 +2. 凡是「补细节」绕不过去、必须动上面这五样里的某一样的,**单独登记在 §八**,并写进 `tmp/supervise-inbox/NEED-USER.md` 交回用户,⛔ 不自己拍。 + +--- + +## 一、热点从哪来(问题 1) + +### 1.1 五路输入,不是只接六个平台热榜 + +【GPT·问题1·1.1】数据来源分五类,六个平台只是其中的「外部热点源」,⛔ 不该把所有输入做成六个平级入口。 + +| 来源类型 | 具体数据 | 主要作用 | 优先级 | +|---|---|---|---| +| 平台热榜 | 微博热搜/抖音热点词与热门视频/知乎热榜/头条热榜/小红书趋势 | 发现平台正在讨论什么 | P0 | +| 对标账号 | 对标号新发内容、异常高表现内容、更新频率 | 发现同赛道正在验证的内容 | P0 | +| 评论与搜索需求 | 高频评论问题、搜索联想词、知乎问题、用户反复追问 | 发现真实需求与内容缺口 | P0 | +| 自有账号数据 | 自己发布内容的播放、互动、涨粉、转化、收入 | 发现已验证的选题模式 | P1 | +| 人工输入与外部信号 | 运营手动录入、行业新闻、节日节点、客户需求、内部灵感 | 补充机器采集不到的信息 | P1 | + +【GPT·问题1·1.1】为什么是五类而不是六平台 —— 因为热点有三种**本质不同**的信号:**注意力信号**(大家在关注什么)/**需求信号**(大家真正想知道什么)/**验证信号**(什么内容已被证明能带来结果)。平台热榜解决第一种,评论+搜索+对标内容解决第二种,自有账号数据解决第三种。 + +【补】这一条直接对上现版的 7 处断点之一 ——「没有平台热榜这一路输入」(`547748` 第 1 条)。现版五路里已经有了后四路(对标账号=F1、评论=F3、自有账号数据=P7 回写、人工输入=随手记/选题库),**缺的正是第一路**。 + +【补】现版落点映射(⛔ 不改结构,只说明它们现在住哪): + +| 五路输入 | 现版落在哪 | +|---|---| +| 平台热榜 | ⛔ 现版没有(本目标的核心缺口) | +| 对标账号 | P2「对标内容」块(F1) | +| 评论与搜索需求 | P2「评论区洞察」块(F3) | +| 自有账号数据 | P7 复盘台产出的 `Performance`,回写 P2(流转第 20 条) | +| 人工输入 | 随手记(全局入口)+ 选题库(F2) | + +### 1.2 六个平台具体怎么接 + +【GPT·问题1·1.2】接入策略是**产品优先级**,⛔ 不代表所有平台都允许任意应用直接读取全部热榜。 + +| 平台 | 优先获取的数据 | 降级方式 | +|---|---|---| +| 微博 | 热搜词、排名、热度、原文链接 | 手动粘贴热搜词/链接,保留原始榜单截图 | +| 抖音 | 实时热点词、上升词、热门视频 | 经许可的第三方数据服务;手动录入 | +| 小红书 | 热搜词、趋势关键词、相关笔记 | 手动输入关键词或笔记链接,记录采集时间 | +| B站 | 热门视频榜、分区榜、互动数据 | 手动添加热门视频链接;定时导入榜单 | +| 知乎 | 热榜问题、标题、热度、回答情况 | 手动录入问题链接 | +| 今日头条 | 热榜新闻、热点关键词、原文链接 | 手动导入热点列表 | + +【GPT·问题1·1.2】三条已经能核实的接入依据:抖音开放平台有实时热点词和上升词接口(需申请 `hotsearch` 权限,热点榜约每 2 小时刷新);抖音另有热门视频榜但属**离线统计**(统计最近 24 小时、每天上午产出),⛔ 不能当实时热搜用;知乎有官方数据开放平台的热榜 API 和 Skill。 + +【GPT·问题1·1.2】一条要紧的提醒:**不要因为浏览器能打开一个榜单,就默认产品可以长期、稳定、合规地自动抓取。** + +【补】现版 `2a` F1 的治理里已经有「退避重试 3 次后转『手工录入对标号』的降级路径」和 90 秒超时 —— ⛔ 那是对标账号那条路的;热榜这条路要照同一套写法补齐来源清单,⛔ 不能只有一句「接入各平台热榜」。 + +### 1.3 三级降级(这是「取不到怎么办」的答案) + +【GPT·问题1·1.3】数据接入分三级,逐级往下退: + +- **L1 官方 API/正式授权接口** —— 自动拉取、定时更新、保留原始字段。可用时优先用。 +- **L2 经许可的第三方聚合服务** —— 补官方没有的榜单,但必须验证授权、覆盖率、刷新频率、成本、稳定性。 +- **L3 人工录入/链接导入** —— 允许粘贴标题、链接或导 CSV。**无法确认的数据⛔ 不填假热度**,标「暂无数据」。 + +【GPT·问题1·1.3】再加一条关键规则:**来源故障不应该导致选题库不可用。** 某个平台断流,已收藏的热点、已有选题、生产任务都必须照常工作。 + +【补】现版已有的两条可与上面拼起来:`2a` F1 写了「刷新失败时有明确提示而不是静默空列表」,`2a` F2 写了选题库「落本地知识库目录,刷新与重启后仍在」⇒ 合起来就是 GPT 说的「来源故障不影响选题库」。 + +### 1.4 「数据来源清单」长什么样(一条条照做) + +【GPT·问题1·1.4】⛔ 不要把来源只做成一排平台图标,要有一个**能配置、能监控、能排障**的数据源清单。每条来源带这些字段: + +| 字段 | 示例 | 用途 | +|---|---|---| +| 来源名称 | 抖音实时热点词 | 识别数据源 | +| 平台 | 抖音 | 按平台筛选 | +| 源类型 | 平台热榜 | 区分榜单/搜索/对标 | +| 接入方式 | 官方 API | 评估稳定性与合规性 | +| 权限状态 | 已授权/待申请/已失效 | 明确可用条件 | +| 更新频率 | 每 2 小时 | 管理新鲜度 | +| 最近成功时间 | 16:00 | 排查断流 | +| 最近失败时间/原因 | 15:00 / 权限过期 | 诊断异常 | +| 数据覆盖率 | 最近 24 小时成功率 | 判断可靠性 | +| 数据字段 | 标题、排名、热度、链接 | 检查是否够算 | +| 使用限制 | 商业展示、留存期限 | 约束数据使用 | +| 成本/配额 | 每日调用量、费用 | 控制成本 | + +【GPT·问题1·1.4】覆盖率要有算法,别只写个字段名: + +- 成功率 = 成功采集次数 ÷ 计划采集次数 × 100%。 +- ≥95% 正常;80%–95% 警告;<80% 异常(显示最近成功时间,并**暂停把它当实时信号**)。 +- 超过 2 个预期更新周期没有新数据 ⇒ 标「数据可能已过期」。 + +【GPT·问题1·1.4】⚠️ 这里的 95% 等是**产品建议的监控阈值**,⛔ 不是平台的服务承诺。 + +### 1.5 首版接入顺序 + +【GPT·问题1·1.5】先接权限明确、能稳定返回结构化数据的(知乎热榜、抖音热点词)+同时上线对标账号和评论洞察(复用现成能力)+微博/小红书/B站/头条逐个过权限验证后接。**首版成功标准不是「六个平台图标全亮」,而是每天能稳定发现、筛选、沉淀一批真实可用的候选选题。** + +【补】一句话收到现版上:热榜这条路按 **L1→L2→L3 三级降级 + 来源清单 + 覆盖率告警** 来建;首版只接已经验证能稳定返回的两三个源,⛔ 不做「六平台全绿」的门面。 + +--- + +## 二、热点按什么分类(问题 2) + +### 2.1 四层分类,一层管一件事 + +【GPT·问题2·2.1】⛔ 不要用一个分类字段解决所有问题。把「内容是什么」「来自哪里」「适合谁做」「做到哪一步」分开: + +| 层级 | 维度 | 示例 | 谁维护 | 目的 | +|---|---|---|---|---| +| L1 | 内容领域 | 科技、商业、职场、教育、娱乐、生活、财经 | 系统初判,用户可改 | 过滤不相关热点 | +| L2 | 事件类型 | 突发、产品发布、政策变化、人物事件、争议、节日节点 | 系统初判,用户可改 | 选内容切入方式 | +| L3 | 账号适配 | 适合哪些人设/内容账号/发布平台 | 系统推荐,用户确认 | 派给正确的运营对象 | +| L4 | 工作状态 | 待判断、观察中、待制作、制作中、已发布、已放弃 | 系统与用户共同维护 | 推进生产、避免重复劳动 | + +【GPT·问题2·2.1】四层⛔ 不能混。举例:「某 AI 模型发布」=科技领域 + 产品发布事件,同时适配「AI 工具测评」和「职场效率」两个人设,最终**分别生成两条角度不同的选题**。 + +### 2.2 维护规则(防 AI 乱打标签、防人工维护爆掉) + +【GPT·问题2·2.2】五条规则: + +- **领域**:系统最多推 3 个标签,必须有 1 个主领域;置信度 <0.7 标「待确认」。 +- **事件类型**:每个热点只设 1 个主类型,最多 2 个辅助标签。 +- **账号适配**:按定位/历史表现/受众/变现目标,最多推 3 个适配人设;用户可增删。 +- **工作状态**:由工作流事件自动更新(点「开始制作」⇒ 变「待制作」或直接建生产任务),⛔ 不能靠 AI 猜文字猜状态。 +- **自定义标签**:允许加品牌/产品/地域/人物/活动标签,但⛔ 不让自定义标签取代系统基础分类。 + +【GPT·问题2·2.2】**不建议首版做三级以上的固定行业树** —— 树太深维护成本高,AI 分类稍偏用户就要花大量时间纠错。 + +### 2.3 两个辅助维度(⛔ 不塞进分类树) + +【GPT·问题2·2.3】 + +- **来源平台**:微博、抖音、小红书、B站、知乎、头条、对标账号、评论区、人工输入 —— 用来定位信息入口。 +- **热点生命周期**:刚出现、快速上升、稳定发酵、开始衰退、已过期 —— 用来判断还有没有创作窗口。 + +### 2.4 界面上怎么用分类 + +【GPT·问题2·2.4】首屏⛔ 不展开庞大分类树,用**三个快速筛选区**: + +1. **领域**:全部/科技/商业/职场/生活/娱乐/其他。 +2. **适配人设**:全部人设/当前人设/多账号可复用。 +3. **阶段**:刚出现/上升中/持续发酵/待制作。 + +更多事件类型、来源平台、工作状态放「筛选」抽屉里。**矩阵运营最有价值的不是让用户看到所有热点,而是默认优先展示「与当前人设相关、仍在有效窗口、还没被团队处理」的热点。** + +### 2.5 与现版的对照(这里要提醒一处) + +【现版】`2b` §五 P2 现在写的是「选题库按**进度 × 类型**两个正交维度分类」:进度=待做/在写/已用,类型=选题/对标线索/评论洞察/数据异动/灵感。 + +【补】两者是**两层不同的东西**,别当重复: + +- GPT 的 **L4 工作状态** ≈ 现版**进度**(但更细,6 态 vs 3 态)。 +- GPT 的 **L1 内容领域/L2 事件类型/L3 账号适配** 是现版**没有的**新维度。 +- 现版的**类型**(选题/对标线索/评论洞察/数据异动/灵感)在 GPT 的框架里对应「这条信息**是什么**」,和 L1/L2 不是一回事 —— 它是五路输入落地后的**归属分类**。 + +【补】⇒ 结论:GPT 的四层是「分类维度」的补全,现版的两维是「选题库内部管理」的口径。**要不要把 L1–L3 加进现版、要不要把进度从 3 态扩到 6 态,属改 `2b`/`2a`,本轮只登记,见 §八。** + +--- + +## 三、热度怎么体现(问题 3) + +### 3.1 三种分数,各答一个问题 + +【GPT·问题3·3.1】⛔ 不要把平台原始热度值直接放进同一条榜单比较,⛔ 也不要把「热度」和「值得做」合并成一个数字。拆成三个: + +- **热度指数(0–100)** —— 这个话题在它自己平台上有多热、现在在升还是在降。答「**值不值得关注**」。 +- **选题价值分(0–100)** —— 适不适合当前人设、能不能差异化、成本与风险可接受吗。答「**值不值得做**」。 +- **时效状态** —— 立即行动/可排期/持续观察/已过期。答「**现在做还是晚点做**」。 + +【GPT·问题3·3.1】抖音热度值、微博排名、知乎热度、B站播放量含义不同,直接比较会产生错误结论。 + +### 3.2 原始热度怎么归一化(三种情况,照公式做) + +【GPT·问题3·3.2】先统一数据结构:每次采集都保留**平台/榜单类型/关键词或事件 ID/原始热度值/原始排名/原始榜单总数/采集时间/榜单更新时间/历史快照/来源可信度**。 + +**情况 A · 平台给连续热度值 x** —— 对同平台、同榜单类型、同时间窗口的热度做对数变换,再映射到 0–100 百分位: + +``` +H = 100 × PercentileRank(ln(1 + x)) +``` + +百分位是**该平台该榜单内**的相对位置,⛔ 不是全平台绝对热度。建议用最近 30 天样本算分布、最近 7 天样本做校准;样本不足时用当前榜单横截面。 + +**情况 B · 平台只给排名** —— + +``` +H = 100 × (1 - (r - 1) / (N - 1)) +``` + +`r` = 排名,`N` = 榜单条数。第 1 名 100 分、第 50 名 0 分。这个分数表达**榜内位置**,⛔ 不表示绝对流量。 + +**情况 C · 平台没有热度值和排名** —— 用可观测指标(单位时间新增互动、播放增长、评论增长、搜索变化),但**只有在数据定义一致、采样稳定时才算**;否则标「**热度未知**」,⛔ 不能为了显示一个数字就伪造可比性。 + +### 3.3 光有当前热度不够,还要趋势 + +【GPT·问题3·3.3】用 **30 分钟**做基础观察窗口,记每次采集的热度指数 `H_t`: + +``` +T30 = H_t - H_(t-30m) +``` + +`T30 > 0` 上升,`≈0` 稳定,`< 0` 下降。为避免单次波动误判,用最近 3 个采样点的中位数或平滑值。**对每 2 小时才更新一次的来源,⛔ 不要伪装成每 30 分钟都有新热度**,应显示「趋势数据不足」或用实际可用快照算。 + +【GPT·问题3·3.3】保留两个观察窗口:**30 分钟**(抓快速上升)+**24 小时**(识别持续发酵)。 + +### 3.4 三档阈值(首版用可解释规则,⛔ 不上复杂模型) + +【GPT·问题3·3.4】 + +| 档位 | 初始规则 | 产品动作 | +|---|---|---| +| 值得关注 | 热度指数 ≥70,或最近 30 分钟上升 ≥15 分,且来源新鲜 | 优先评估选题价值 | +| 可考虑 | 热度指数 40–69,或热度偏高但趋势数据不足 | 结合人设/差异化/时效判断 | +| 不建议追 | 热度指数 <40 且持续下降无长期价值,或已过期 | 默认降级展示,不进优先队列 | + +【GPT·问题3·3.4】一条硬规则:**数据过期的热点⛔ 不得显示为「值得关注」**,哪怕上次采集的热度很高。过期阈值先设「超过 2 个预期更新周期」或「超过 6 小时无新快照」。 + +【GPT·问题3·3.4】⚠️ 「不建议追热点」⛔ ≠ 「这个话题没有内容价值」—— 有些长尾知识问题本来就不需要热榜高分。 + +### 3.5 选题价值分:七维加权(这是「值得做」的那把尺) + +【GPT·问题3·3.5】借 Easel 的七维,改成适配矩阵运营的口径,每维 1–10 分,加权换算百分制: + +| 维度 | 权重 | 评估什么 | +|---|---|---| +| 账号匹配度 | 25% | 是否符合人设定位、受众、内容承诺 | +| 需求与流量潜力 | 20% | 热度、增长趋势、用户问题强度 | +| 差异化空间 | 15% | 有没有新观点/新角度/信息增量 | +| 时效价值 | 15% | 现在做还赶不赶得上有效窗口 | +| 变现或增长价值 | 10% | 是否帮助涨粉、转化、收入 | +| 制作可行性 | 10% | 是否能在所需时间内完成、成本是否合理 | +| 合规与声誉风险 | 5% | 是否涉及版权/隐私/未证实信息/高风险表达 | + +``` +V = 10 × Σ(w_i × s_i) 权重和为 1,s_i 为各维 1–10 分 +``` + +【GPT·问题3·3.5】合规与声誉风险那一维必须**反向评分**(风险越低分越高)。**明确不允许发布的内容,⛔ 不能靠其他维度高分抵消,应直接触发风险拦截。** + +**决策阈值**:70–100 建议做(且无硬性风险拦截);50–69 建议改角度或补信息;<50 不建议投入制作资源。 + +【GPT·问题3·3.5】还要有数据完整性要求:七维**至少六维有可靠依据**才允许出正式价值分;账号匹配度/时效价值/风险三维**必须有分**;否则显示「**待评估**」,⛔ 不能把缺失数据默认成中等分。 + +### 3.6 把「相对平时水平的倍数」变得可解释 + +【GPT·问题3·3.6】现版对标内容上那个「倍数」要和热榜热度指数**彻底分开**。定义: + +``` +M = 该内容当前播放量 ÷ 该账号同类型内容的基准播放量 +``` + +基准值=该账号**最近 30 天内、同内容类型的有效样本中位数**,**至少 10 条有效样本**。样本不足 ⇒ 显示「样本不足」,⛔ 不强行给倍数。 + +【GPT·问题3·3.6】播放量拿不到时可改用互动率或评论数,但必须注明比较口径,⛔ 不能把不同指标混成一个「爆款倍数」。三种显示:「播放表现 2.4×」/「互动表现 1.6×」/「暂无可靠基准」。 + +【补】这一条正好补上现版 7 处断点里的第 2、3 条(`倍数没分母`、`zone 没阈值`)。现版 `547748` 报告给的建议值是「近 30 条中位数、样本 <10 不给、异常值 ≥3.0、低粉爆款 ≥2.0 且粉丝 <1 万」;GPT 这版把窗口写成 **30 天**(不是 30 条)、样本下限 **10 条**,两版**不一致** —— 见 §八待定项。 + +--- + +## 四、这些细节在界面上怎么展示(问题 4) + +### 4.1 首选布局:一个工作台,不是六个平台的榜单拼盘 + +【GPT·问题4·4.1】保留「选题雷达」页,把「热点发现」做成首屏主视图,对标内容/评论洞察保留为**其他输入视图**。整体结构: + +``` +选题雷达 数据正常 5/6 + 今日热点 128 | 值得关注 18 | 待评估 32 + [ 热点发现 ] [ 对标内容 ] [ 评论洞察 ] [ 选题库 ] ← 视图切换 + ┌ 热点发现 ───────────────────────────────┐ + │ 排序:综合优先级 ▼ 全部平台 ▼ 全部领域 ▼ 当前人设 ▼ 近24小时 ▼ │ + │ 86 热度 │ AI 工具发布新功能 │ + │ │ 抖音 · 科技 · 12 分钟前更新 · 快速上升 · 匹配当前人设 │ + │ │ 建议角度:普通用户如何用它完成一项具体任务 │ + │ │ 价值分 82 · 评估置信度高 [加入选题库][生成选题] │ + │ 71 热度 │ 职场人讨论远程办公 … │ + └────────────────────────────────────────┘ +``` + +【GPT·问题4·4.1】几个重点:顶部数字判**整体工作量**(⛔ 不是替代列表);主区以热点列表为核心;每条同时显示热度、趋势、适配程度和下一步操作;**七维评分⛔ 不铺在列表里**,详细依据放详情抽屉。 + +### 4.2 列表/卡片/榜单,选哪个 + +【GPT·问题4·4.2】**首选:桌面端表格化列表 + 右侧详情抽屉。** 理由是运营者要高频比较、批量处理、筛选、派发,不只是阅读。 + +| 组件 | 推荐形式 | 理由 | +|---|---|---| +| 顶部概览 | 3–4 个统计指标 | 看热点池规模、待处理量、数据状态 | +| 平台入口 | 横向 Tab 或多选筛选器 | 快速切来源,⛔ 不拆成六个孤立页 | +| 热点列表 | 表格化列表 | 方便排序、批量收藏、批量忽略 | +| 热点详情 | 右侧抽屉 | 不离开列表就能看证据、评分、相关内容 | +| 选题候选 | 独立选题卡片 | 强调创作角度、目标人设、生产动作 | +| 选题库 | 列表 + 可切换看板 | 支持检索、状态管理、批量操作 | + +【GPT·问题4·4.2】纯卡片瀑布流更适合视觉灵感浏览;纯榜单适合看名次,⛔ 不适合跨平台决策。可以允许切视图,但**默认视图要服务运营效率**。 + +### 4.3 每条热点显示什么(七组,一条不多) + +【GPT·问题4·4.3】首屏控制在 7 个信息组: + +1. **热点主体** —— 标题、事件摘要、关键词、原文链接。 +2. **来源与新鲜度** —— 平台、榜单类型、排名、最后采集时间。 +3. **热度与趋势** —— 热度指数、上升/稳定/下降、趋势窗口。 +4. **分类与适配** —— 领域、事件类型、推荐人设。 +5. **决策结果** —— 建议做/改角度/观察/不建议做,可带价值分。 +6. **推荐切入角度** —— 一句话说清为什么适合该人设、建议从哪切。 +7. **下一步操作** —— 加入选题库、生成选题、观察、忽略。 + +【GPT·问题4·4.3】一个要紧的交互细节:**「收藏热点」和「生成选题」是两个不同动作。** 收藏=保留原始事件稍后再评;生成选题=创建一条带明确角度/人设/形式的选题记录。只有「收藏」和「做内容」两个按钮,用户很难表达「有价值,但我还没想好怎么做」。 + +【现版】现版的对应按钮是「转入创作」(`2b` §六第 8 条流转)与选题库的「做内容/排期/推进状态」。**「收藏热点」这个动作现版没有** —— 见 §八。 + +### 4.4 一屏放多少条 + +【GPT·问题4·4.4】桌面端:首屏 **8–12 条**完整热点记录;单条行高约 **88–120 px**;默认**每页 20 条**,可选 20/50/100;左侧筛选区约 **200–240 px**,中间列表约占可用宽度 **60%–70%**,详情抽屉宽约 **400–480 px**;列表默认⛔ 不展示全部七维,只展示热度、趋势、建议和关键风险;选中后在右侧看详细评分依据。 + +【GPT·问题4·4.4】⚠️ 尺寸是初始设计建议,应通过原型实测调整。⛔ 别为了「一屏塞更多」把每条压成只有标题和一个分数。 + +### 4.5 默认排序(⛔ 不是按热度从高到低) + +【GPT·问题4·4.5】首选**行动优先级**排序: + +1. 有效、可信、正在快速上升、且适配当前人设的。 +2. 热度高、价值分高,但趋势较稳定的。 +3. 热度中等、需求明确、有差异化空间的长尾选题。 +4. 观察中、数据不足或与当前人设关联弱的。 +5. 已过期、已忽略、已生成选题的。 + +【GPT·问题4·4.5】同时保留「按热度/按上升速度/按最新/按价值分」四种手动排序。 + +【补】现版没有关于 P2 排序的规定,这一节是纯新增细节。 + +--- + +## 五、一个「选题板块」要具备哪些细节(问题 5) + +【GPT·问题5·5.1】拆成 **8 个能力模块**,前四个解决发现和判断,后四个解决工作流闭环: + +| 模块 | 必须具备的细节 | 解决什么问题 | +|---|---|---| +| 1 数据采集 | 来源管理、更新频率、失败重试、采集时间、原始链接、数据质量状态 | 保证热点不是过期或虚假数据 | +| 2 事件去重 | 标题相似度、关键词匹配、事件归并、跨平台关联 | 避免同一热点重复占列表 | +| 3 热度与趋势 | 当前热度、排名变化、历史快照、趋势图、过期判定 | 判断现在是不是合适窗口 | +| 4 价值判断 | 人设匹配、差异化、时效、成本、变现、风险及证据 | 帮用户决定做不做 | +| 5 选题生成 | 多角度建议、标题草案、核心观点、目标受众、内容形式 | 把热点转成真能生产的选题 | +| 6 选题库管理 | 收藏、状态、负责人、截止时间、标签、关联热点、去重、搜索 | 避免只收藏不处理 | +| 7 内容生产衔接 | 目标人设、发布平台、内容 Brief、写作/脚本/素材入口 | 把选题推进到制作 | +| 8 效果回收 | 发布记录、播放互动、涨粉、转化、收入、复盘与评分校准 | 验证哪些判断真的有效 | + +### 5.1 热点和选题必须是两种数据对象 + +【GPT·问题5·5.2】这是最建议在**数据模型阶段就定死**的一件事: + +- **热点事件 Hotspot** —— 原始标题、事件描述、来源平台、原始链接、热度快照、生命周期、事件 ID。 +- **选题 Topic** —— 创作角度、目标人设、目标受众、内容形式、核心观点、差异化、价值分、生产状态。 + +【GPT·问题5·5.2】关系是**多对多**:一个热点可生成多个选题;一个选题可关联多个热点/评论洞察/对标内容;一个选题指定一个主人设、关联多个目标平台。**这样能避免「收藏了一个热点就算选题」。** + +### 5.2 选题生成必须有结构化 Brief + +【GPT·问题5·5.3】⛔ 不要只让 AI 输出十个标题 —— 标题只是入口,不是可执行的生产任务。每条选题至少输出这些字段:**选题名称/目标人设/目标受众/核心问题/切入角度/核心观点/内容形式/开头钩子/结构提纲/证据与素材/制作成本/风险提示/成功指标**。 + +【GPT·问题5·5.3】AI 可以先把字段填满,**但必须标出待核实信息**;没证据的内容⛔ 不能伪装成事实。 + +### 5.3 选题库的「进度 × 类型」怎么升级 + +【GPT·问题5·5.4】现有「待做/在写/已用」+五类型是不错的起点,但对完整工作流来说**状态过于粗糙**。建议进度改为 6 态: + +| 状态 | 进入条件 | 下一步 | +|---|---|---| +| 待评估 | 刚收集,还没决定做不做 | 评估价值 | +| 待制作 | 已确认选题,有基本 Brief | 分配负责人、确认平台 | +| 制作中 | 已创建写作或制作任务 | 继续写作/剪辑 | +| 待发布 | 内容已完成,等检查或排期 | 审核、发布 | +| 已发布 | 已有实际发布记录 | 绑数据并复盘 | +| 已归档 | 放弃、过期或完成复盘 | 查看历史、恢复使用 | + +【GPT·问题5·5.4】原来的**类型保留为独立标签**(选题/对标线索/评论洞察/数据异动/灵感)。**热点事件建议保留在独立热点池**,⛔ 不跟普通灵感用同一套管理方式(热点有独立的热度和生命周期)。 + +【GPT·问题5·5.4】再加三个字段:**负责人**(谁推进)、**截止时间**(什么时候必须完成)、**目标人设与发布平台**(谁来做、发到哪)。GPT 说这三字段比再加分类标签更能提升实际效率。 + +### 5.4 事件去重与关联 + +【GPT·问题5·5.5】同一个事件同时出现在微博/抖音/知乎时,⛔ 不该默认显示三条互不相关的记录,应该归并成一个**热点事件**:事件标题 + 来源(多平台)+ 跨平台表现(各平台分别显示排名/热度/趋势)+ 关联内容 + 推荐选题。 + +【GPT·问题5·5.5】**但去重 ≠ 合并所有数据** —— 各平台热度必须保留独立记录,⛔ 不能把微博热度和抖音热度直接相加。建议先用标题相似度/关键词/时间窗口做候选归并,再由 AI 判断是否同一事件;低置信度归并**让用户确认**。 + +【现版】现版 `2a` F2 已有「同一条灵感重复提交按内容 hash 去重」—— 那是**单条信息**的去重;GPT 这条是**跨平台事件**的归并,比它高一档。 + +### 5.5 让热点与账号定位真正关联 + +【GPT·问题5·5.6】矩阵运营最大的优势是**同一个事件被多个账号从不同角度用**。同一个科技热点可以生成:AI 工具测评人设(实测功能优缺点)/职场效率人设(能否解决具体工作问题)/商业观察人设(产品策略与竞争)/新手教程人设(一步步教)。 + +【GPT·问题5·5.6】所以热点详情必须有「**适配人设**」区域,至少显示:推荐人设/推荐理由/建议内容角度/建议发布平台/预计制作成本/是否与已有选题重复。**⛔ 不能只按关键词匹配人设** —— 「AI」不意味着所有 AI 热点都适合每个科技号。 + +### 5.6 发布后的反馈闭环 + +【GPT·问题5·5.7】每条已发布内容应关联回原始选题和热点,记录:发布平台/时间/链接;发布后 **2 小时、24 小时、7 天**的可用表现数据;播放量/互动率/收藏率/涨粉/转化/收入;与该账号同类型内容的历史基准比较;**实际结果与预估结果的偏差**。 + +【GPT·问题5·5.7】⛔ 不是所有平台都能给全部指标,系统应**按实际授权情况记录可用字段**。 + +### 5.7 四项容易被低估的运营保障 + +【GPT·问题5·5.8】**操作审计**(谁收藏/改分/放弃/发布)/**权限控制**(团队、工作空间、内容账号的查看与编辑)/**异常提醒**(来源断流、热点即将过期、任务逾期、内容重复)/**数据可追溯**(每个热度、评分、推荐理由都能回到原始证据)。 + +【GPT·问题5·5.8】尤其 AI 的推荐理由,⛔ 不能只存一句生成文本 —— 最好同时存「用了哪些信号、对应哪些原始数据、评分模型是哪个版本」。 + +--- + +## 六、评分/判断这一层怎么落进界面(问题 6) + +### 6.1 结论优先,分数辅助,维度可展开,证据可追溯 + +【GPT·问题6】判断是:**要显示评分,但⛔ 不让分数成为唯一依据**。 + +【GPT·问题6·6.1】为什么不只显示结论 —— 假设两条都是「建议做,价值分 82」:A 可能因为账号匹配高+正在上升;B 可能因为变现潜力高但时效一般。**运营者该采取的行动不同**,只看结论分不出区别。 + +### 6.2 四层展示结构 + +【GPT·问题6·6.2】 + +- **第一层 · 列表默认展示**:结论 + 价值分 + 推荐角度 + 一句话理由。例:`AI 工具发布新功能 · 建议做 · 82/100 · 推荐角度:真实任务实测 · 理由:人设匹配高、热度上升、成本可控`。 +- **第二层 · 详情页评分明细**:七维逐项 `账号匹配度 9/10`/`需求与流量潜力 8/10`/`差异化空间 7/10`/`时效价值 9/10`/`变现或增长价值 7/10`/`制作可行性 8/10`/`合规与声誉风险 8/10`。 +- **第三层 · 判断依据**:为什么推荐(适配当前人设/仍有创作窗口/需要验证什么)。 +- **第四层 · 用户决策**:接受建议/调整方向/稍后观察/不做并记录原因。 + +### 6.3 哪些显示、哪些不显示 + +【GPT·问题6·6.3】 + +| 信息 | 列表 | 详情 | 判断 | +|---|---|---|---| +| 做/改方向/观察/不建议做 | 必须 | 必须 | 用户先要行动结论 | +| 选题价值分 | 建议显示 | 必须 | 便于快速比较 | +| 热度指数及趋势 | 必须 | 必须 | 与价值分分开显示 | + +【GPT·问题6·6.3】⛔ 不建议首屏默认展示雷达图 —— 七维雷达图可作详情页的辅助可视化,但它**不如明确的结论、评分理由、风险提示直接**。 + +### 6.4 「置信度」和「价值分」必须分开 + +【GPT·问题6·6.4】三个例子说清区别:价值分 85 但置信度低 ⇒ 值得做但证据不足,用户先核实;价值分 65 但置信度高 ⇒ 有充分证据判断价值一般,可考虑改角度;价值分 90 但存在高风险 ⇒ ⛔ 不因分高就自动进生产。 + +【GPT·问题6·6.4】置信度按**数据完整性/来源可靠性/历史样本量/评分依据充分程度**综合定,首版用高/中/低三级并在详情说明原因。**⛔ 不要把置信度等同于 AI 自称「我有多确定」**,它应由可检查的数据条件决定。 + +### 6.5 评分系统要允许用户纠正 + +【GPT·问题6·6.5】支持:改单维分数/覆盖系统建议(不做/改方向/先观察)/记录修改原因/把人工决定与最终发布效果关联/查看系统推荐与人工决策的历史差异。**人工改后的分数标「人工调整」,⛔ 不悄悄覆盖原始 AI 评分**,否则后面没法分析模型哪里不准。 + +【GPT·问题6】收尾一句:**先上「规则 + AI 辅助评分」,攒够真实发布结果后再校准权重**,⛔ 别一上来就把七维分数当成验证过的预测模型。 + +--- + +## 七、把上面收成「现版这一页怎么做」(本轮的可执行结论) + +### 7.1 一句话链路 + +``` +五路输入(平台热榜/对标账号/评论搜索/自有数据/人工) + → 统一热点数据模型(来源 + 原始热度 + 快照 + 生命周期) + → 去重归并成「热点事件」 + → 热度指数(归一化 + 趋势)+ 时效状态 + → 分类(领域/事件类型/适配人设)+ 快速筛选 + → 选题价值分(七维)+ 置信度 + 风险拦截 + → 决策(做/改角度/观察/不做) + → 进选题库 → 生产 → 发布 → 反馈回收 → 校准权重 +``` + +### 7.2 落到现版 P2 的四块上(⛔ 不新增板块) + +| 现版板块 | 补进去的细节(来自本文件哪节) | +|---|---| +| 对标监控概览 | 概览数字保留;补「来源新鲜度/数据质量」提示(§1.4) | +| 对标内容 | 倍数口径写死=近 30 天同类型中位数、样本 ≥10、不足则「样本不足」(§3.6) | +| 评论区洞察 | 补「评论→需求信号」定位;去重按评论标识(现版已有,§5.4) | +| 选题库 | 补价值分/置信度展示、五类后续动作的落点、进度与类型的对照(§2.5/§6) | + +### 7.3 缺口清单(本轮登记的,⛔ 一条都没动手) + +| 序 | 缺什么 | 属于哪一层 | 要动什么 | +|---|---|---|---| +| 1 | 平台热榜这一路输入 | 数据层 | 可能新增一块或扩 F1 ⇒ 见 §八 | +| 2 | 热点事件独立数据模型 | 数据层 | 可能新增对象 ⇒ 见 §八 | +| 3 | 热度归一化与趋势算法 | 判据层 | 纯补细节,可落 | +| 4 | 三档阈值 | 判据层 | 纯补细节,可落 | +| 5 | 七维价值分与阈值 | 判据层 | 纯补细节,可落 | +| 6 | 倍数口径 | 判据层 | 纯补细节,可落 | +| 7 | 「收藏热点」与「生成选题」两动作 | 交互层 | 要动 P2 交互 ⇒ 见 §八 | +| 8 | 数据源管理清单/页面 | 交互层 | 可能是新页面 ⇒ 见 §八 | +| 9 | 进度 3 态 → 6 态 | 状态层 | 要改 `2a` F2 ⇒ 见 §八 | +| 10 | 负责人/截止时间字段 | 数据层 | 要改 `2a` Topic 字段 ⇒ 见 §八 | + +--- + +## 八、与现版结构冲突的项(只登记,⛔ 本轮没改,交回用户) + +下面这几条,**按现版口径做不下去,必须动结构**。本轮一条都没动手 —— 用户 2026-10-10 逐字「**没让改的 交互不允许乱改**」。 + +| 序 | GPT 的主张 | 撞到现版哪条硬约束 | 需要用户裁定的问题 | +|---|---|---|---| +| A | 加一条「平台热榜」输入,做成首屏主视图 | 板块 39 块固定;P2 现在只有 4 块 | 热榜是**新增一块**(⇒ 板块变 40),还是**并进 F1**(「对标账号监控」扩成「热点与对标监控」)? | +| B | 热点事件独立成对象(Hotspot,与 Topic 多对多) | 对象 11 个固定 | 是否把 Hotspot 提为第 12 个对象?还是让它只作 `Topic` 的一个子类型(现版「数据异动」已接近)? | +| C | 进度从 3 态扩到 6 态 | `2a` F2 现写 `draft→待做→在写→已用/弃用` | 进度扩态要改 `2a` F2 与 `2b` §五 P2,改不改? | +| D | 新增「收藏热点」动作(与「生成选题」分开) | `2b` §六第 8 条流转只有「转入创作」 | 是否新增一条流转(⇒ 流转变 21 条)? | +| E | 新增「数据源管理」页面 | 页面 7 个固定 | 是新开一页,还是做成 P2 的**可点入子区**(不占一页)? | +| F | 给 `Topic` 加「负责人/截止时间」字段 | `2a` §二 Topic 行现只写「来源与分类」 | 字段加不加?(加字段不改对象数,但改 `2a`) | + +【补】我的倾向(可推翻):**A 选「并进 F1」、B 选「不新增对象(用 `Topic` 的子类型表达)」、E 选「P2 子区」** —— 这三条都满足「更小改动、更少新增形态、不扩大可见面」;C/D/F 是交互与字段级,建议等用户看完图再定。以上仅为倾向,⛔ 不作为已完成的口径。 + +--- + +## 附一:来源标注汇总(哪条是谁的) + +**属 GPT 判断的**:五路输入与三信号、六平台接入与降级方式、L1/L2/L3 三级降级、数据源清单 12 字段与成功率告警、四层分类 L1–L4 与维护规则、两个辅助维度、三种分数、热度归一化公式(三种情况)、T30 趋势、三档阈值、七维价值分与阈值、倍数口径(30 天/≥10 条)、工作台布局、列表+抽屉、七组信息、一屏 8–12 条、行动优先级排序、8 个能力模块、Hotspot 与 Topic 分离、结构化 Brief 13 字段、进度 6 态、事件去重原则、适配人设区域、反馈闭环(2h/24h/7d)、四项运营保障、四层评分展示、置信度与价值分分离、允许人工纠正。 + +**属我补充的**:五路输入到现版落点的映射表、三元降级与现版治理条款的拼接、「GPT 四层 vs 现版两维」的对照、倍数两版口径不一致的登记、「收藏热点」等新增动作的对照、§七 落到 P2 各块的映射、§八 六条结构冲突项与倾向。 + +**属现版已有的**:P2 四块与 F1/F2/F3 的功能定义、F1 状态流转与 90 秒超时/退避重试降级、F2 进度 `draft→待做→在写→已用/弃用` 与五类型、F2 内容 hash 去重、F3 评论抓取与样本排序、`2b` 的「进度 × 类型」两维、流转第 8/20 条、资产入库不限页等。 + +--- + +## 附二:本份自检 + +- [x] 四问(来源/分类/热度/展示)每一项都写到「照着能做出来」:有公式、有阈值、有字段、有条数、有尺寸 +- [x] 三色标注贯穿全文,⛔ 没把 GPT 的判断与我的补充混着说 +- [x] `2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动** +- [x] 页面 7/导航七项/板块 39/流转 20 条/对象 11 个 全部保持 +- [x] 与现版结构冲突的 6 条单独登记在 §八,并写进 `NEED-USER.md` +- [x] 已过「说人话」五维评分:**46/50** + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/专题/热点与选题-逻辑关系-国内口径-已被全球版接续.md b/docs/pm/mcn-shortvideo-agent/专题/热点与选题-逻辑关系-国内口径-已被全球版接续.md new file mode 100644 index 0000000..a403716 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/专题/热点与选题-逻辑关系-国内口径-已被全球版接续.md @@ -0,0 +1,153 @@ +# 热点与选题的功能逻辑关系(据 Easel 逆向梳理) + +> 用户令(2026-10-11 04:03 逐字):「完成目标:**根据 Easel 分析梳理热点和选题板块功能的逻辑关系**,并画出产品框图和功能流程图」。 +> 输入(**只读**):① Easel 逆向报告 `执行会话/目标-逆向Easel热点雷达与选题链路补齐现版-547748/第1棒_逆向Easel热点雷达与选题链路_2026-10-10.md`(15 456 B);② 现版 `2a-产品功能-新版.md`(V4)、`2b-界面布局-新版.md`(V4)。 +> 本棒只做**梳理 + 出图**。`2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动**,页数 7、导航七项、板块 39、流转 20 条、业务对象 11 个全部保持原样。 + +--- + +## 〇 先把名字对齐 —— 否则全文对不上现版 + +🔴 **现版没有叫「热点」的板块。** P2 选题雷达只有 4 块,逐字取 `2b` §五 P2:**对标监控概览/对标内容/评论区洞察/选题库**。 + +所以本文件这样用词,一处都不含糊: + +- **「热点」=选题的信号来源(发现侧)。** 它是 Easel 那套「热点雷达」在现版里的对应物。现版承载它的**不是一个板块,是三块加一个类型**:对标监控概览、对标内容、评论区洞察(三块),加上选题库里的「**数据异动**」(一个类型)。 +- **「选题」=「选题库」这一块 + 它往下推的动作。** 板块就是 P2 的选题库(`2a` F2);往下的动作是 F4 拆解、以及把一条选题转进创作台(`2b` §六第 8 条流转)。 +- **两块都在 P2 同一页**,这不是凑巧 —— 是用户 2026-10-09 定的归属判据:「找选题和做选题就应该在一起,都是选题相关的事情」(`2a` §一 第 2 条)。 + +一句话:**「热点」在现版不是一块,是三块加一个类型;「选题」是一块。这一页干的整件事,就是把前面那三块半的信号收进后面这一块,再推出去。** + +--- + +## 一 Easel 那边是什么关系 + +Easel 的热点雷达**自己不做任何判断**。它只干三件事:把六个平台的热榜拉回来、解析成统一结构、给每条挂两个按钮。 + +判断在它后面。真正把热点变成选题的是 Plan 层的三个技能(`skill-trending-topics` / `skill-trend-rider` / `skill-topic-evaluator`),它们共用一套七维打分口径(`scoring-dimensions.md`,标题就叫「唯一标准」)。 + +⇒ 所以 Easel 的链路是**三段**,不是两段: + +``` +热点(原料池) → 选题库(中转站) → 判断(打分与角度) → 排期 +``` + +**关键**:素材本身不带判断,判断是**后加的一层**。「收藏到选题库」写进去的只有 `title` + `source` + `status: pending`;「做内容」则是把一句话 prompt 发出去,让 Agent 在对话里现算。 + +--- + +## 二 现版这边是什么关系 + +### 2.1 谁产出什么 + +⚠️ 先纠一个容易搞混的点:**对标监控概览不产出对象。** 它是 F1 的四个数汇总(在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数),是**看板**,不是来源。真正往选题库送东西的是另外几条路。 + +| 产出者(板块,逐字取 `2b`) | 功能 | 产出什么 | 落到哪 | 依据 | +|---|---|---|---|---| +| 对标监控概览 | F1 | 不产出对象 —— 四个数,用来挑「哪条值得看」 | 本页 | `2b` §五 P2 第 1 块 | +| 对标内容 | F1 | ① `Benchmark` 的线索(对某条发起拆解 → `Asset` 原料);② 异常值 → 一条 `Topic` | ① P3 资产库(第 7 条流转)② 选题库,类型=**数据异动** | `2b` §六第 7 条;`2a` F1/F2 | +| 评论区洞察 | F3 | `Topic`,类型=**评论洞察**(原料是评论里的 `Insight`,一出候选就变成 `Topic`) | 选题库 | `2a` F3 | +| 选题库 | F2 | **`Topic` 的唯一权威记录处**;进度 × 类型两个维度都在这 | 本页 | `2a` F2;`2b` §五 P2 第 4 块 | +| 随手记(全局可达,**不占板块**) | F2 | `Topic`,类型默认=**灵感**,进度默认=**待做** | 选题库 | `2b` §四;`2a` F2 | + +**产出关系收成一句话**:三块(对标内容/评论区洞察/随手记)往一处(选题库)送;`Topic` 只在这一个地方落地,别处都是消费它。 + +### 2.2 什么触发什么 + +选题库靠**两个正交维度**分流,这就是现版的「判断层」——不是 Easel 那种打分,是**按类型派活**(`2a` F2): + +**类型 → 后续动作**(一条信息同时带进度和类型,⛔ 不是二选一): + +| 类型 | 后续动作(逐字取 `2a` F2) | +|---|---| +| 选题 | 转入创作 | +| 对标线索 | 去资产库拆解 | +| 评论洞察 | 采纳成选题 | +| 数据异动 | 参与选题判断(做或不做同题) | +| 灵感 | 续写,或升级成上面任一类型(随手记的默认落点) | + +**进度 → 状态流转**(`2a` F2):`draft → 待做 → 在写 → 已用 / 弃用`。守卫是「转『已用』需已关联到一条内容」。 + +两条维度各管一件事:**类型回答「这条是什么、下一步去哪」,进度回答「这条做到哪一步了」**。改类型不改进度,改进度不改类型。 + +### 2.3 数据怎么流 + +**对象层**(`2a` §二 11 个对象里,与这一段相关的只有 4 个): + +``` +Benchmark(P2 产出)──┐ + ├─→ Topic(P2 产出,唯一权威在选题库)─→ Content(P4) +评论区评论 Insight ────┘ │ +(不出本功能,一出候选即成 Topic) └─→ Asset(P2/P3/P4 均可入库,权威在 P3) + +Review(P7 产出)──→ Topic(第 20 条流转,复盘反哺下一轮选题) +``` + +**跨页层**(`2b` §六 20 条里,与「热点/选题」直接相关的 4 条): + +| # | 来源 → 目标 | 触发 | 传什么 | 落地 | +|---|---|---|---|---| +| 1 | P1 → P2 | 点「异常值提示」里某条 | `benchmarkId` + `filter=异常值` | P2 按 filter 筛对标内容,停在那一条 | +| 7 | P2 → P3 | 对某条对标内容发起拆解 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 | +| 8 | P2 → P4 | 把一条选题转入创作 | `topicId` | P4 创建或切换当前 `Content`;新建草稿 v1;标题继承选题标题 | +| 20 | P7 → P2 | 复盘发现转下一轮选题 | `reviewId` | 选题库「待做」多出一条,来源标该复盘(⚠️ 此条标「新增·待确认」) | + +全部走同一条规则:**跨页只传对象 ID 加必要上下文,不传页面临时状态**(`2a` §一 第 3 条)。第 8 条尤其要紧 —— 它治的就是上一版「只改了选题状态就跳页,创作台显示的还是写死的上一条」。 + +### 2.4 边界在哪 + +四条边界,都写在现版里,不是我加的: + +1. **P2 不负责内容生产。** `2b` §五 P2 的「不应该负责」一栏写着:内容生产那是 P4。选题库把一条选题推出去之后,就不归 P2 管了。 +2. **选题库是 `Topic` 的唯一权威,但入库动作不限页。** 这两件事不冲突:`2a` §一 第 4 条把话说死了 —— 「一个对象只有一处」管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页。资产那条更明显:P2/P3/P4 都能就地入库,权威记录仍只有一份,统一由资产库页管。 +3. **「热点」不单独成页、不单独成块。** 三块信号源和选题库同在 P2,因为它们是同一类事(找选题)。再拆一页出来就会把「找到 → 记下 → 推进」这条链子切断。 +4. **随手记不占板块。** 它是**框架层**的全局入口(`2b` §四),任意页面一次点击内碰得到,写进来的东西落进选题库。⛔ 它不算 P2 的第 5 块(V4 已把「灵感速记」并进选题库,就是为消掉这处打架)。 + +--- + +## 三 拿 Easel 对照,现版这 7 处是断的(登记,⛔ 本棒不改) + +上一棒的报告列了 8 条缺口。这里按「**这条断在哪一块、缺的是哪一层**」重新分了一遍 —— 结论没变,只是落点写清楚了。⛔ 这 7 条**本轮只登记,一条都没动手**(改②段/原型属于扩范围,得用户点头)。 + +| 序 | 断在哪块(`2b` 板块名) | 缺的是哪一层 | 现状 | +|---|---|---|---| +| 1 | 整页(P2) | 数据层 | 没有平台热榜这一路输入。现版只盯对标号,用户每天刷的公众热榜没有入口 | +| 2 | 对标内容 | 判据层 | 倍数 `mult` 在原型里是字面量(`'4.8×'`、`'6.4×'`)—— 有分子没分母,「该账号平时水平」没定义 | +| 3 | 对标内容 | 判据层 | `zone` 三个值(低粉爆款/异常值/常态)在原型里是硬编码字段,没有阈值 | +| 4 | 选题库 | 转化层 | 转进创作时是裸标题,不带 Easel 那句「先判它适不适合我的账号赛道」 | +| 5 | 选题库 | 文档层 | `Topic` 的 `src` 字段只有界面有,`2a` 没立「来源必填、由产生它的功能写入」的口径 | +| 6 | 整页(P2) | 数据层 | 没有缓存与降级,也没有「这个平台取不到」与「本来就没数据」的界面区分 | +| 7 | 对标内容 | 判据层 | 对标列表不掺 `Account` —— 对标号 A 的爆款和 B 的爆款混在一张表里 | + +**现版比 Easel 强的一处,保持住**:去重。Easel 的「已收藏」状态只活在前端内存里,刷新就没了,后端也不去重;现版 `2a` F2 的治理已经写了「同一条灵感重复提交按内容 hash 去重」。这条别照抄它。 + +**3.2 那两条(第 2、3 序)为什么先修最划算**:它们是**零数据源就能落地**的 —— 不用接外部接口,只要把阈值定下来。上一棒的判断我认:**有阈值才知道错在哪,没阈值永远只是三个标签**。但这属于改②段,不是在梳理任务里顺手做的事。 + +--- + +## 四 结论 + +1. **现版里「热点」和「选题」不是并列的两个板块,是一条链的两端。** 热点侧是三块(对标监控概览/对标内容/评论区洞察)+一个类型(数据异动);选题侧是一块(选题库)。 +2. **这条链的枢纽是「类型」这个维度。** 它是现版自己的判断层 —— Easel 用七维打分做判断,现版用「按类型派活」做判断。两者不是一回事:Easel 判「做不做」,现版判「下一步去哪」。 +3. **链子是通的,缺的是输入端和判据层。** 输入端缺一路(平台热榜),判据层缺两个能算的数(倍数与分类阈值)。链路结构本身不用改。 +4. **上一棒的 8 条缺口全部属于「补内容」,不属于「改结构」。** 页面数、导航项、板块数、流转条数、对象数一个都不用动 —— 这也是本棒一个字没改产品的前提。 + +--- + +## 附:三样产出的路径 + +- 本文件:`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/逻辑关系-热点与选题-2026-10-11.md` +- 产品框图(HTML,可直接打开):`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/产品框图-热点与选题-2026-10-11.html` +- 功能流程图(HTML,可直接打开):`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/功能流程图-热点到选题-2026-10-11.html` + +## 附:输出检查 + +- [x] 板块名逐字取 `2b` §五 P2(对标监控概览/对标内容/评论区洞察/选题库),功能编号逐字取 `2a`(F1/F2/F3) +- [x] 谁产出什么、什么触发什么、数据怎么流、边界在哪 —— 四问各有一节 +- [x] `2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动**(本棒只写本目标目录) +- [x] 7 处断点逐条标明「断在哪块、缺哪一层」,并写明本轮只登记不动手 +- [x] 未新增板块、未改页数/导航/流转条数/对象数 +- [x] 三样产出路径列清 +- [x] 已过「说人话」五维评分:**47/50** + +*(说人话自评:47/50 直接性 10 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档-MCN短视频整合营销__72111e.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档-MCN短视频整合营销__72111e.md new file mode 100644 index 0000000..1d8c40b --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档-MCN短视频整合营销__72111e.md @@ -0,0 +1,239 @@ +# MCN 短视频内容整合营销智能体 · 需求文档(1a) + +> 项目 slug:`mcn-shortvideo-agent`|性质:**汇总型需求**(不是 grill 澄清出来的,来源见 §二) +> 汇总时间:2026-10-07 | 状态行:**已确认 6 项 / 模型补全 9 项(其中 9 项未经用户确认)** +> 本文档由三类输入汇总:① 视频关键帧梳理(AI 内容工作台 2.0 / 3.0);② 5 份开源竞品独立分析体加 1 份汇总对比体(`content-workbench`);③ MCN 场景约束(多账号矩阵、短视频为主、整合营销)。 +> 凡模型自补的内容标【假设】,凡来自具体来源的标【源:…】。 +> 🔴 **上游状态(2026-10-07 22:3x 更新,此前一行已作废)**:第 ②类输入已**重写完成并逐条复核完毕**。5 份独立体在 21:40 到 22:01 重写为产品视角七节结构;汇总对比体在 22:3x 按新边界重排。逐条复核结论:**9 条受影响条目里 2 条改、7 条不改**(清单见 `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/复核清单-1a受影响条目.md`)。 +> 本版据此改了两处:**F5 的措辞**(旧写「敏感词与事实检测」,新版事实是「敏感信息硬拦 + 人设一致性软劝」)、**F7 的依据列**(Easel 发布中心直证的只有「多平台」,「多账号」另找依据)。另外 §六 治理段的「组织级暂停」按新版改成「组织级急停」,并把三件事「人来做」的形态分开写。 +> 其余受影响条目(F8、F9、F13、F10 后半、§三、§四 后两条、§七)复核后**依据全部坐实**,未改内容。 + +--- + +## 一、一句话 + +**做什么**:给 MCN 机构的内容团队做一套智能体工作台,把「找选题 → 做内容 → 多账号多平台发布 → 投放与商业化留痕 → 复盘回写」串成一条可复用、可追溯到单条素材的链路。 + +**为谁**:MCN 内容负责人、编导与文案、剪辑与投放。面向的是**一个账号矩阵**,不是单个账号。 + +**不做什么**:不做平台自动化代发(发布是人的动作);不自建投放系统(只对接与留痕);不做个人版单账号工具;不做数据仓库。 + +--- + +## 二、这份需求汇总了什么 + +| 来源 | 性质 | 证据等级 | 落点 | +|---|---|---|---| +| AI 内容工作台 2.0 / 3.0(作者「小曾」) | 关键帧视觉梳理,Obsidian 插件形态 | 视频画面级(532 加 772 帧逐帧读) | `参考资料/AI内容工作台_功能点梳理.md`、`参考资料/Bilibili_BV1gsHn6AEk6/`、`参考资料/YouTube_jVHyoCYidLM/` | +| Easel | 开源竞品 | 源码级 + 官方文档级 + **界面级**(唯一有官方截图的一家) | `content-workbench/证据附卷/1b-竞品分析-Easel.md` | +| OpenCreator | 开源竞品 | 源码级 + 官方文档级 | `…/1b-竞品分析-OpenCreator.md` | +| 文到 AI | 闭源商业产品 | **文档级**(仓库无源码,全仓 5 blob) | `…/1b-竞品分析-文到AI.md` | +| Postiz 与 PostSider | 开源竞品 | 源码级 + 官方文档级,含 fork 差异量化 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` | +| 5 项目清单与初步定位 | 独立体入口(竞品池总览) | 同各家 | `…/1b-竞品分析-5项目清单与初步定位.md` | +| 汇总对比体 | 主份,横向铺开加选型结论 | 综合上述五份 | `content-workbench/research/1b-竞品分析.md`(新版见目标目录 `72111e/1b-竞品分析-汇总对比体.md`) | + +**证据强度要带着看**:文到 AI 那一列只有文档级证据,它的结论不能与另四个源码级项目同权;AI 内容工作台的结论来自视频画面,能确认「界面上有什么」,不能确认「它内部怎么实现」;界面级证据本组只有 Easel 一家有,所以凡是「界面怎么动」的判断,五家里只有 Easel 是直证,其余都是源码或文档反推。 + +--- + +## 三、产品定位与边界 + +一句话定位:**矩阵级的内容生产与经营中枢**,不是又一把写作工具。 + +和已有的三类工具比,差位有三条(这三条正好是竞品分析 §9.3 里写明的三个空白): + +1. **发现热点这一段普遍弱**。做内容的三家里两家只是「有」,做发布的两家几乎不管。【源:竞品主份 §8 ①、§9.3①;独立体 Easel §三(热点雷达)、OpenCreator §三(「弱,没有热点发现」)、文到 AI §四(热点雷达,文档级)、Postiz 与 PostSider §四(弱)】 +2. **合规的自动发布是空白**。现在只有「浏览器自动化(有账号风险)」和「官方 OAuth 或只填充(要人工)」两条路,没有第三条。【源:竞品主份 §9.3②;独立体 Postiz 与 PostSider §七 可突破 1 原话「这条第三条路还没人走」;独立体 Easel §六 弱 2(自认自动化发布有风控风险)】 +3. **做内容与发内容仍是两套产品**,用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。【源:竞品主份 §9.3③;独立体 Easel §七 可突破 1(「做内容」和「发内容」是两拨人在做两半,中间是断层);独立体 Postiz 与 PostSider §七 可突破 3(「那段桥还是空的」)】 + +本产品选的是第 1 条与第 3 条,第 2 条按 §六 F5 的边界处理:只做分级闸门,不做自动代发。 + +--- + +## 四、为谁做 + +**内容负责人**(主用户):定选题方向、审内容、看矩阵效果。他每天要回答的是「今天哪个账号发什么」。(【源:视频关键帧·对标与热点、发布与经营】) + +**编导与文案**(高频用户):把一个选题做成成稿,走完创作流水线。他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;独立体 Easel §五 机制 1「三层加载」——元数据常驻、指令触发、资源按需,机制带来的用户结果正是「技能多到一百多个,聊天仍然跑得动」】) + +**剪辑与投放**(协作用户):拿到成稿做视频,管发布与投留痕。他要的是「素材和文案对得上」。(【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据;五家竞品也都没有 MCN 投放留痕这一段的证据 —— 独立体 OpenCreator §三 只到「审批、结果、继续对话」】) + +--- + +## 五、使用场景 + +按用户故事写,四个槽位缺一不成立(谁、什么处境、要办成什么、得到什么结果)。 + +**S1 找选题** +作为编导,当我面对一个矩阵下十个账号、每天要出三条内容时,我要知道「哪个赛道的哪条内容数据异常地好」,这样我不用逐个平台刷榜。 +【源:视频关键帧·对标博主监控四指标卡与「N 倍平时互动」异常值;竞品主份 §8 ①、§9.3①】 + +**S2 选题进资产库** +作为内容负责人,当我把一条爆款拆完,我要它的「角度、结构、开场白、标题」进资产库,这样下一次创作不是凭空写。 +【源:视频关键帧·拆解与沉淀·资产库;独立体 文到 AI §四 能力 4「能力库」把稳定步骤沉淀为可复用方案】 + +**S3 走完创作流水线** +作为文案,当我要把一条选题做成短视频,我要在同一条流水线里走完「聊思路 → 写文案 → 起标题 → 做封面 → 发布检查 → 生成录制卡片」,不用记每个 skill 的名字。 +【源:视频关键帧·创作 Tab 子流程;独立体 Easel §五 机制 1】 + +**S4 一份母版变多份** +作为运营,当一条母版内容做好,我要它变成矩阵下多个账号、多个平台各自的版本,这样我不用手工改十遍。 +【源:独立体 Easel §四 能力 4「发布中心」——一处编辑、八端预览、超限当场标出(**直证的是「多平台」**);「多账号」靠 Easel 的多画像支持加本产品的矩阵需求,发布中心本身未见逐账号变体;独立体 文到 AI §四 能力 3「卡片工坊」一稿多形态】 + +**S5 发之前先过闸** +作为内容负责人,当我要把内容交出去发,我要在发之前看清两件事:哪里会被硬拦、哪里只是提醒(发布中心会把超限的当场标出来),而且不可逆的动作必须由人确认。 +【源:独立体 Easel §四 能力 5(硬拦只认账号密钥与内部路径这类敏感信息,人设偏低只告警);独立体 Postiz 与 PostSider §五 机制 5(read-first / draft-first,发布仍是人的动作)】 +⚠️ 上一版这里写「看到具体改哪一句」,新版没有这个依据 —— Easel 的发布中心只标超限和格式问题,不逐句给改写建议。已按事实收紧。 + +**S6 效果回写** +作为负责人,当一条内容跑完,我要它的表现沉淀回账号画像,这样下一轮选题自己会变准。 +【源:独立体 Easel §三 核心步骤 6(读播放、互动、评论,把有效结构和偏好沉淀回画像记忆文件)+ §六 强 1(本组唯一把发现到归因串成闭环);视频关键帧·数据复盘「四分离」分析】 + +**S7 看整个矩阵** +作为机构负责人,当我的矩阵有二十个账号,我要一个界面回答「每个账号今天该发什么、发了什么、效果如何」。 +【假设:独立体五家都只做单账号或单团队视角(PostSider 到「多组织机构」为止,还是团队级),矩阵级视图是推断出来的差位;视频画面里也只看到单账号工作台】 + +**S8 商单与内容对账** +作为商务,当一条内容带了商单,我要内容、发布记录与收支能对上。 +【假设:视频关键帧里有「收支」Tab,但它记录的是什么口径没有画面证据;MCN 结算场景是推断的】 + +--- + +## 六、功能范围 + +每条给功能名、来自哪条场景、优先级、来源。优先级判据只有一句话,不给数字打分。 + +| # | 功能 | 来自 | 优先级 | 来源与说明 | +|---|---|---|---|---| +| F1 | 对标账号监控与爆款异常值识别 | S1 | P0 | 视频关键帧;不做则 S1 整条办不成 | +| F2 | 选题库与灵感速记(落本地知识库) | S1 S2 | P0 | 视频关键帧·首页随手记录加选题 | +| F3 | 评论区洞察找选题 | S1 | P1 | 视频关键帧;不做仍能从 F1 得选题,只是少一路输入 | +| F4 | 爆款拆解与资产库(角度、结构、开场白、标题四库) | S2 | P0 | 视频关键帧·关键差异化;这一条决定了「越用越准」 | +| F5 | 发布前分级闸门(**敏感信息硬拦 + 人设一致性软劝**) | S5 | P0 | 独立体 Easel §四 能力 5 两道闸:密钥、内部路径这类敏感信息 fail-closed 硬拦;人设一致性低于 80 分只告警。不过硬闸就不许发 | +| F6 | 创作流水线(聊思路到录制卡片七个环节) | S3 | P0 | 视频关键帧·创作 Tab | +| F7 | 一份母版到多账号多平台版本 | S4 | P0 | **Easel 发布中心直证「多平台」**(一处编辑、八端预览);**「多账号」的依据是 Easel 多画像支持 + 本产品的矩阵需求**,发布中心未见逐账号变体。不做则 S4 办不成 | +| F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | 独立体 OpenCreator §五 机制 4(修订产生新版本、带 `sourceArtifactIds` 溯源与 `stale` 标记);独立体 文到 AI §五 机制 4(版本可对比、可采用、可继续改)。本组两次独立观测到同一条 | +| F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | 独立体 Easel §四 能力 2(六维画像)+ §五 机制 3(画像内联进 prompt、不写全局文件,为了并发不覆盖) | +| F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘(前半);独立体 Easel §三 核心步骤 6 加 §六 强 1(后半,**本组唯一闭环**) | +| F11 | 矩阵级看板(每账号该发什么、发了什么、效果如何) | S7 | P1 | 【假设】五家竞品无此形态 | +| F12 | 商单与收支记录、内容对账 | S8 | P2 | 【假设】视频关键帧有「收支」Tab,口径未证实 | +| F13 | 发布留痕与人工确认记录 | S5 | P1 | 独立体 Postiz 与 PostSider §四 能力 3(审批流、审计轨迹)+ §三 PostSider 核心步骤 3(草稿进审批队列,人批了才排上) | +| F14 | 录制卡片与画板(Excalidraw 形态) | S3 | P2 | 视频关键帧·画板模块;不影响场景办成,只是更好用 | + +**六项治理要在每条功能条目里各自交代**(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认)。这几条在本版只列要求,具体落在②段 P0 条目上。「不可逆操作二次确认」与 F5、F13 直接相关,但**三件事「人来做」的形态不一样,别压成一句话**: + +- **发布**:发布这个动作本身留在人手里(read-first / draft-first)。【源:独立体 Postiz 与 PostSider §五 机制 5】 +- **删帖**:带破坏性注解,属需要二次确认的一类。【源:独立体 Postiz 与 PostSider §七 该借鉴 3,`destructiveHint: true` 只留给删帖和急停两件】 +- **组织级急停**:触发与恢复都只有人能做。【源:独立体 Postiz 与 PostSider §三 PostSider「系统帮了什么」】 + +--- + +## 七、能力底座(从竞品抄什么、避什么) + +**该抄的八条**(都能追溯到具体项目,节号指新版独立体): + +1. **技能即能力**:技能不是名词,配可运行脚本,成品落盘。【源:独立体 Easel §四 能力 1(114 技能,技能树挂 146 个 `.py`)】 +2. **三层加载加 `SKILL.md` 不超过 200 行**:元数据常驻、指令触发、资源按需。这是让能力持续变多而不炸 prompt 的唯一解。【源:独立体 Easel §五 机制 1】 +3. **契约层独立成包**:三端同源,版本号明文可读。【源:独立体 OpenCreator §五 机制 3、§七 该借鉴 2(`packages/protocol` 与 `protocolVersion`)】 +4. **状态机加版本号加幂等键三件套**,并为「远端到底收没收」专设 `unknown_remote_acceptance` 与 `abandoned_unknown` 两个状态。【源:独立体 OpenCreator §五 机制 3】 +5. **read-first / draft-first**:Agent 可以准备、排期、送审,发布仍是人的动作。这条把「自动化」与「不可逆」分开。【源:独立体 Postiz 与 PostSider §五 机制 5】 +6. **发布前分级闸门**:不可逆的硬拦,可商量的软劝,不做一刀切。【源:独立体 Easel §四 能力 5】 +7. **本地与免密钥 provider 作一等公民**:用户不必先配 Key 才能开始用。【源:独立体 OpenCreator §五 机制 6(自注「本组三个做内容的项目都出现」)、文到 AI §五 机制 2、Easel §四】 +8. **独立更新清单**:`channel`、逐包 `sha256`、`minimumSupportedVersion`、`allowSkip`、`remindAfterHours`。【源:独立体 文到 AI §五 机制 3(`stable.json` 逐字段)】 + +**该避的五条**: + +避浏览器自动化发平台(账号风控是真实风险,Easel 自己在 README 里承认)【源:独立体 Easel §六 弱 2】。避 README 与发行状态脱钩(文到 AI 的文档停在「尚未发布」,实际已发 10 个版本)【源:独立体 文到 AI §六 弱 3】。避上游强耦合的薄壳路线(OpenCreator 把 Agent loop 全交给 Codex,一次破坏性变更就可能整体不可用)【源:独立体 OpenCreator §六 弱 1】。避命名双轨(产品改名了,内嵌件还用旧名)【源:独立体 OpenCreator §六 弱 4】。避素材授权未核实就用(一律先设 `draft`)【源:独立体 OpenCreator §五 机制 8、§七 该避开 4】。 + +--- + +## 八、明确不做 + +**第一版不做**:自动代发到平台(走 F5 加 F13 的人确认路径)。矩阵级的自动投放优化。跨机构协作与权限体系。移动端 App。把平台数据抓回来做数仓。 + +**这一版只留的三个入口**(其余先不铺):找选题、走创作流水线、看矩阵复盘。 + +--- + +## 九、假设与风险 + +| # | 假设或风险 | 类型 | 影响面 | +|---|---|---|---| +| A1 | MCN 的账号数在 10 到 50 之间,超出会让 F11 的看板要重新设计 | 假设 | F11、F9 | +| A2 | 平台数据靠官方接口或授权方式拿,不靠抓取 | 假设 | F1、F10;若拿不到,S1 与 S6 要降级 | +| A3 | 收支记录的口径是「内容级」而不是「月级」 | 假设 | F12 | +| A4 | 团队 5 到 20 人,不超过三层审批 | 假设 | F5、F13 | +| R1 | 上游模型或 Agent 引擎的破坏性变更 | 风险 | 全链路;对策是契约层加可用版本回退【源:独立体 OpenCreator §六 弱 1、§九 借鉴 6 迁移演练】 | +| R2 | 平台发布规则变动导致合规路线失效 | 风险 | F5、F7;对策是分级闸门加人工确认【源:独立体 Easel §六 弱 2、Postiz 与 PostSider §七 该避开 1】 | +| R3 | 资产库沉淀质量差,变成垃圾场 | 风险 | F4;对策是入库前设门禁,参照 OpenCreator 模板治理的 `draft` 做法【源:独立体 OpenCreator §五 机制 8】 | +| R4 | 多账号并发写同一份状态互相覆盖 | 风险 | F9;对策是记忆作用域收敛到画像目录,不写全局【源:独立体 Easel §五 机制 3】 | + +--- + +## 十、待复核清单 + +以下 9 条是模型补全的,未经用户确认,不得在②段当事实用: + +1、A1 的账号数区间(10 到 50)。 +2、A2 的数据获取方式(官方接口优先)。 +3、A3 的收支口径。 +4、A4 的团队规模与审批层数。 +5、S7 矩阵级视图是否真的需要,还是先只做单账号复制。 +6、S8 商单对账是否进第一版。 +7、F3 评论洞察的数据来源与频率。 +8、「整合营销」到底含不含投放(若含,需要新增一条场景)。 +9、本产品只服务一个机构自用,还是要做成可交付给别的机构的产品。 + +--- + +## 附:来源对照 + +| 功能或结论 | 主要来源 | +|---|---| +| F1 F2 F3 F4 F6 F14 | `参考资料/AI内容工作台_功能点梳理.md`(视频关键帧梳理) | +| F5 | 独立体 Easel §四 能力 5(发布安全闸门两道) | +| F7 | 独立体 Easel §四 能力 4(发布中心) | +| F8 | 独立体 OpenCreator §五 机制 4;独立体 文到 AI §五 机制 4 | +| F9 | 独立体 Easel §四 能力 2、§五 机制 3 | +| F10 | 视频关键帧(前半);独立体 Easel §三 核心步骤 6、§六 强 1(后半) | +| F13 | 独立体 Postiz 与 PostSider §四 能力 3、§三 PostSider 核心步骤 3 | +| §三 三条差位 | 汇总对比体 §8、§9.3①②③;独立体 Easel §七 可突破 1、Postiz 与 PostSider §七 可突破 1 与 3 | +| §七 该抄与该避 | 独立体 Easel §四 §五 §六、OpenCreator §四 §五 §六、Postiz 与 PostSider §五 §七、文到 AI §五 §六 | +| §九 R1—R4 对策 | 独立体 OpenCreator §五 机制 8、独立体 Easel §五 机制 3 | +| S7 S8 A1—A4 | 【假设】,无外部来源 | + +🔴 **这张表里所有指向竞品分析的节号都已在 2026-10-07 22:3x 按新版独立体逐个核过**(新版独立体统一为七节结构,故不再出现旧的 `§8.2` / `§九` / `§十一` / `§十三` 这类编号)。指向视频关键帧梳理的行不受影响。 + +--- + +## 这一版跟上一版的实质差别 + +上一版(2026-10-07 21:36 写)发布时,第 ②类输入(6 份开源竞品分析)**正在按 1b 方法论重写**,它把 9 条受影响条目挂成「待复核」,并声明「⛔ 不得当终稿用」。这一版就是那份复核的结果落地。 + +实质差别逐条列: + +1. **文首状态行整条换掉。** 上一版写「上游正在重写、9 条待复核、不得当终稿」;这一版写「重写完成并逐条复核完毕、9 条里 2 条改 7 条不改」,并把复核清单的路径写上。这是这一版存在的理由。 + +2. **F5 的措辞改了(这是内容层真改,不是换词)。** 上一版写「敏感词与事实检测,硬拦加软劝」。新版独立体里 Easel 的硬闸管的是 API key、内部路径这类**敏感信息**,软闸管的是**人设一致性**,全程没有「敏感词」也没有「事实检测」。照旧写会把②段带去做一个竞品池里没人做过的「事实核查器」。已改成「敏感信息硬拦 + 人设一致性软劝」。 + +3. **F7 的依据列改了。** 上一版直接写「Easel 发布中心;不做则 S4 办不成」,读起来像「Easel 的发布中心已经能做矩阵级变体」。新版独立体证明:发布中心直证的只有**多平台**(一处编辑、八端预览);**多账号**靠的是 Easel 的多画像支持,加上本产品的矩阵需求。依据列已按这个界线拆开写。 + +4. **S5 收紧。** 上一版写「我要在发之前看到哪里有风险、具体改哪一句」。「具体改哪一句」在新版独立体里找不到依据 —— Easel 的发布中心只标超限字数和格式,不逐句给改写建议。已改成「哪里会被硬拦、哪里只是提醒」,并加了警示行说明为什么收。 + +5. **§六 治理段的「人来做」拆开了。** 上一版把发布、删帖、组织级暂停三件事压成一句「必须人来做」。新版说的是:发布是人的动作、删帖带破坏性注解需要二次确认、组织级**急停**的触发与恢复只有人能做 —— 三件形态不一样。已拆成三条,并把「暂停」更正为「急停」。 + +6. **§七 的十三条依据全部换新版节号。** 上一版笼统写「四份单项目附卷的可借鉴点与风险段」(那些附卷当时还是旧结构);这一版逐条挂新版独立体的节号,并且每条都核过。 + +7. **§二 来源表重排。** 上一版把 6 份开源分析压成 4 行;这一版按「5 份独立体 + 1 份汇总对比体」分列,并把证据等级改成三级(加「界面级」,只 Easel 有),在表下补了一句「界面级的判断五家里只有 Easel 是直证」。 + +8. **§三 三条差位补独立体出处。** 内容判定没变(三条都坐实),但每条后面补上了独立体里的旁证,不再只靠汇总对比体一句话。 + +9. **§四、§九 的引用更新。** 编导与文案那条补了 Easel 三层加载的机制细节;R1 到 R4 的对策逐条挂上独立体节号;剪辑与投放那条仍是【假设】,因为五家竞品都没有 MCN 投放留痕的证据。 + +**没变的部分**:§一 一句话与不做什么、§五 的 S1 到 S8 骨架、§六 的功能编号与优先级、§八 明确不做、§十 的 9 条待复核。这些不受上游重写影响。 + +--- + +*本文档是「MCN 短视频内容整合营销智能体」的①段 1a 需求文档(汇总型)。上游取证见 `content-workbench` 的 1b 系列与 `参考资料/` 下的视频抽帧材料。本版落在目标目录 `72111e` 内,⛔ 未覆盖工作区根 `docs/pm/mcn-shortvideo-agent/research/1a-需求文档.md`。* + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__72111e.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__72111e.md new file mode 100644 index 0000000..c9746de --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__72111e.md @@ -0,0 +1,106 @@ +# 需求文档(1a) + +> 项目:`proto-board`|更新:2026-10-07|性质:拍板 +> 口径依据:`stage-discovery/references/grill-me.md`(A / B 两节决策树,全场唯一一份 grill)。 +> 改版说明:2026-10-07 按上述方法论重写 —— 决策表补「理由」「影响范围」两列、分支按 A/B 两节重新铺齐、假设与待确认项各自带归宿。与上一版的实质差别见文末。 + +**本表 23 项:已确认 15 项(用户拍板)/模型补全 8 项(7 项【假设】+ 1 项【事实】)。7 项【假设】均未经用户确认,逐条列在 §四待复核清单。** + +## 一、起点三句 + +做什么:一个个人用的 Web 工作台。用户在它里面建项目、在项目里开多个版本,每个版本贴入或上传需求,点一下就生成一份能直接打开的交互页面。 + +为谁:一个人。操作者就是唯一使用者,没有协作、没有角色、没有团队。 + +不做什么:进度看板、待办清单、动态流、评审流一律不做。这东西不卖、不融资、不接付费用户,所以也没有账号、订阅、权限这一层。 + +## 二、决策表 + +来源列只有三种取值:**用户拍板** / **【假设】** / **【事实】**。「影响范围」列写的是这份决策会牵动哪几份下游文档。 + +### A 节 —— 要做什么、为谁、边界在哪 + +| # | 问题 | 决策 | 来源 | 理由 | 影响范围 | +|---|---|---|---|---|---| +| A1 | 解决什么问题 | 需求、版本、产物现在散在三处:需求在文档里、原型在目录里、找回来靠记路径。缺一个把「建项目 → 开版本 → 贴需求 → 看页面」串成一处的入口 | 用户拍板 | 原话定位就是「为不同项目生成产品交互页面」的工作台 | 1d 价值主张、2a 全部功能 | +| A2 | 成功怎么算 | 点完生成,页面上能出现一份可打开的 HTML,且能点回上一版对照。不设使用量、留存这类数字指标 | 【假设】 | 用户只说了「先把页面生成好」,衡量口径是我补的;本产品无数据源,不许编数字 | 1d 关键指标、2a 验收要点 | +| A3 | 谁用、熟练到什么程度 | 单一个人。他已经在用 WorkBuddy 的产品规划技能,熟悉 `research/` `prd/` `designs/` 这套产出约定 | 用户拍板 | 定位原文即「调用产品规划技能」 | 1c 全份、1d 分节 | +| A4 | 现在怎么凑合 | 在对话里跑技能,产出散落到各目录,靠手记或搜索认路径;同一方案改到第三轮时容易认不出哪份是哪份 | 【假设】 | 依据 A6 的落盘约定(只存项目名/需求名/版本名)反推,没有访谈佐证 | 1c 痛点、1d 价值主张 | +| A5 | 第一版做什么 | 建项目 → 项目内建多版本 → 每版本输入或上传需求 → 点生成 → 看页面 | 用户拍板 | 原话就是这条链路 | 2a 功能清单、2b 页面清单 | +| A6 | 明确不做什么 | 进度看板 / 待办清单 / 动态流 / 评审流;不售卖、不融资、不面向付费用户 | 用户拍板 | 原话「本产品不售卖、不融资、不面向付费用户」 | 2a「不做」对照、1d 取舍 | +| A7 | 价值落在哪一层 | 界面为主。用户拿到的是「一份能看的页面」,约定和文件结构只是手段 | 用户拍板 | 原话「价值层:界面为主」 | 1d 价值主张、2b 页型判定 | +| A8 | 应该有几个界面 | 3 个:项目列表 / 版本列表 / 版本工作台。每个界面只办一件事,不合并 | 用户拍板 | 原话拍了 3 页结构 | 2b 页面清单与流转 | +| A9 | 信息承载到哪一层 | 主屏只留项目名、版本名、版本状态三样;需求全文与产物 HTML 点进去看 | 用户拍板 | 原话「只项目名称、需求名称、版本名称,点进能看」 | 2b 信息承载分档 | +| A10 | 手上已有什么素材 | 有的:用户自己的需求文本(`.md` / `.txt`)。缺的:产品规划技能的可直接调用接口 —— 原型期用模拟顶上,真接口接进来之前,生成结果不能算真实产出 | 【假设】 | 依据 A11「先把页面生成好、其余后续再做」的排期推断 | 2a 假设台账、1d 关键假设 | +| A11 | 约束 | 个人自用。无预算、无排期、无合规底线。唯一的时间约束是「先把页面生成好」,其余都往后放 | 用户拍板 | 原话「先把页面生成好、其余后续再做」 | 2a 优先级口径 | +| A12 | 依赖什么 | 依赖 WorkBuddy 工作台与产品规划技能;产物落本地文件系统。不依赖任何后端服务 | 【假设】 | 依据 A13 的形态(个人 web 页面、workbuddy 工作台)+ B7 的持久化决策 | 2a 六项治理、1d 能力 | +| A13 | 用户现在拿什么替代 | 三条:在对话里直接跑产品规划技能;用 v0 / 即时 AI 这类文生界面工具;自己手写 HTML | 【事实】 | 来自 1b 竞品观察(两类工具的共性做法) | 1d 价值主张、1e 替代方案列 | + +### B 节 —— 做成什么样、哪些情况不成立、状态怎么流转 + +| # | 问题 | 决策 | 来源 | 理由 | 影响范围 | +|---|---|---|---|---|---| +| B1 | 形态与骨架(粗粒度) | 三页。列表页=一行操作 + 一张列表;工作台=左边贴需求、右边看状态与产物。精确板块与排列归②段 | 用户拍板 | 原话拍了 3 页与工作台的左右分栏方向 | 2b 全份 | +| B2 | 什么情况不成立 | 三种:需求为空 ⇒ 不给生成;技能调用失败 ⇒ 本次不成立,给出失败原因;还没建过任何项目或版本 ⇒ 先引导新建,不摆空表格 | 用户拍板 | 原话「需求为空禁用生成;技能调用失败弹提示可重试」 | 2a 守卫条件、2b 空态 | +| B3 | 状态怎么流转 | 版本有四个状态:`draft`(草稿)→ `running`(生成中)→ `done`(已生成),任一步出错进 `failed`(失败)。`done` 可以重新生成,覆盖同一版本,不另起一个 | 用户拍板 | 原话「草稿 → 生成中 → 已生成,可重新生成」 | 2a 状态迁移表 | +| B4 | 失败了怎么办 | 给出失败原因,给一键重试。重试停在同一个版本里,不新建版本 | 用户拍板 | 原话「弹提示可重试」 | 2a F9、2b 工作台右栏 | +| B5 | 输入什么、产出什么、谁维护、存在哪 | 输入=文本框,可输入也可上传 `.md` / `.txt`;产出=单个 HTML,存 `designs/<项目>/<版本>.html`;维护人=用户自己;存在本地 | 用户拍板 | 原话定死了路径与格式 | 2a F7/F8、2b 工作台 | +| B6 | 权限怎么算 | 单人,没有角色系统,也没有越权这回事 | 用户拍板 | 原话「单人,无角色系统」 | 2a 六项治理 | +| B7 | 同一件事被做两次会怎样 | 生成中按钮锁死,点不动;重新生成覆盖同一版本文件,不留重复产物 | 用户拍板 | 前半依据原话「生成按钮防重复点击」,后半的「不留重复」是我补口径 | 2a F6/F11、2a 幂等 | +| B8 | 持久化到什么程度 | 项目、版本、需求、产物路径全部存浏览器本地,刷新和重开浏览器都不丢;清掉浏览器存储就会丢,这一条要明说 | 【假设】 | 原始决策是「浏览器本地存储即可,无需后端账号体系」,我把它展开成可判据 | 2a 六项治理、1d 风险 | +| B9 | 生成这一步怎么实现 | 原型期用「生成过程可视 + 占位产物」模拟技能调用,留一个真接口接入点。真实接入不在本版 | 【假设】 | 原始决策是「原型期内以模拟实现」,我写清它的代价 | 2a F8、1d 关键假设 | +| B10 | 空的时候显示什么 | 没有项目、没有版本时,列表区换成新建引导(一句话 + 主操作),不显示空表格 | 【假设】 | 原始决策已定调,我补了「不显示空表格」这一半 | 2a F3、2b 页1/页2 空态 | + +## 三、假设台账(每条【假设】的归宿) + +规矩:每条【假设】只能落在三种归宿里的一种 —— 已确认 / 待实现且已排定确认时机 / 已按假设落地。既没确认、又已经写进实现、还没有落地说明的,不许存在。 + +| # | 假设 | 归宿 | 说明 | +|---|---|---|---| +| A2 | 成功算「能拿到一份可打开的 HTML」 | ② 待实现且已排定确认时机 | 在 2a 落盘前必须问一次用户:验收是否只认「能打开」,还是要加别的 | +| A4 | 现在靠手记或搜索认路径 | ① 已确认 | 用户拍板「只项目名称、需求名称、版本名称,点进能看」隐含认路径这件事是问题 | +| A10 | 技能真接口暂缺、原型期用模拟 | ③ 已按假设落地 | 影响面:生成结果只是占位产物,不能当真实交付。回退口径:接上真接口后只换 F8 的生成实现,其余不动 | +| A12 | 不依赖后端服务 | ③ 已按假设落地 | 影响面:换设备看不到自己的东西。回退口径:要跨设备时再加账号与云端存储,前端骨架不用改 | +| B8 | 数据存浏览器本地 | ③ 已按假设落地 | 影响面:清浏览器存储等于清库。回退口径同 A12 | +| B9 | 生成过程可视 + 占位产物 | ③ 已按假设落地 | 影响面:生成本身不产生真实页面。回退口径:同 A10 | +| B10 | 空态用新建引导替代空表格 | ③ 已按假设落地 | 影响面:无。回退口径:无需回退,若改成空表格要回②段改 | + +## 四、待复核清单(一次性过) + +下面 7 条是模型补的,用户还没逐条回应。请一次看完,逐条说「可以」或「不对」: + +1. A2 成功口径 —— 只认「能打开一份 HTML」够不够? +2. A4 现状描述 —— 现在真是「靠手记或搜索认路径」吗? +3. A10 技能接口 —— 是不是确实还没接、暂且用模拟? +4. A12 后端 —— 确认不要任何后端? +5. B8 存储 —— 存浏览器本地可以吗?(换设备会看不到) +6. B9 生成实现 —— 原型期用模拟生成,接受吗? +7. B10 空态 —— 空的时候用引导页替代空表格,可以吗? + +## 五、待确认项(三字段齐全才落盘) + +| 条目 | 复核人 | 复核时机 | 结论落点 | +|---|---|---|---| +| A2 成功口径 | 用户 | 2a 落盘前必须问 | `1a-需求文档.md` A2 行;若改口径,同步 `2a-产品功能.md` 的验收要点 | +| A4 现状描述 | 用户 | 1c 定稿前 | `1c-用户画像.md` 的痛点段 | +| A10 / B9 技能接入 | 用户 | ③段开工前(原型期结束的分界) | `1a-需求文档.md` A10 行;同步 `2a-产品功能.md` F8 | + +## 六、这一版跟上一版的实质差别 + +上一版是 2026-10-07 01:46 的稿子,四节(做什么 / 为谁 / 明确不做什么 / 两张决策表)+一段假设归宿。这一版逐条比下来,动了这些地方: + +1. 决策表从 4 列改成 6 列,补上「理由」和「影响范围」。上一版只记了「拍板结果」,看不出为什么这么拍、拍了会牵动谁;下游 2a/2b 拿不到依据。 +2. 决策粒度从 13 项拆到 23 项。上一版把「界面结构」「版本状态」「数据契约」各压成一行,实际每一行里塞了两三件事;拆开后每行只回答一个问题,来源列才说得准。 +3. 分支覆盖补了四个 —— 上一版完全没有的:「素材与数据」(A10)、「约束」(A11)、「依赖」(A12)、「替代方案」(A13)。grill-me 的 A 节必问支里这四支一个都没出现。 +4. 「交付形态」这一支从隐含改成显式三问:价值在哪一层(A7)、几个界面(A8)、信息承载到哪层(A9)。上一版只有「价值层=界面为主」一栏,另两问散在 B 节里。 +5. B 节从 4 项(B1 界面结构 / B2 版本状态 / B3 不成立条件 / B4 数据契约)扩到 10 项,补齐 grill-me B 节要求的「失败与恢复」「权限」「并发与幂等」三支,并把「持久化」「生成实现」「空态」单列。 +6. 顶部状态行从「用户拍板 9 项/模型补全 4 项」改成「已确认 15 项/模型补全 8 项(7 项【假设】+ 1 项【事实】)」,并显式写明 7 项未经确认。上一版那句「可推翻」不等于把「未经确认」摆出来。 +7. 假设归宿段从「一句话打包」(B5–B8 已落地)改成逐条三归宿表,补影响面与回退口径。 +8. 新增 §四待复核清单与 §五待确认项三字段表 —— 上一版没有这两节,「假设」与「待定」都没有回收时机。 +9. 边界收紧:按 stage-discovery 硬约束,本份不写功能清单,B1 只给粗粒度骨架,精确板块与排列推给 2b。 + +## 七、说人话评分 + +已过内容准则(`humanizer` / `humanizer-zh`),评分 **47/50**:直接性 10、节奏 9、信任度 10、真实性 9、精炼度 9。 + +扣分处:决策表的「理由」列为了保持一行一条,写成了短句串,读起来略紧;「影响范围」列在大表里重复出现「2a / 2b」,可以再压。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__旧归档research-15KB-20261007.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__旧归档research-15KB-20261007.md new file mode 100644 index 0000000..db543d9 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/1a-需求文档__旧归档research-15KB-20261007.md @@ -0,0 +1,201 @@ +# MCN 短视频内容整合营销智能体 · 需求文档(1a) + +> 项目 slug:`mcn-shortvideo-agent`|性质:**汇总型需求**(不是 grill 澄清出来的,来源见 §二) +> 汇总时间:2026-10-07 | 状态行:**已确认 6 项 / 模型补全 9 项(其中 9 项未经用户确认)** +> 本文档由三类输入汇总:① 视频关键帧梳理(AI 内容工作台 2.0 / 3.0);② 6 份开源竞品分析(`content-workbench`);③ MCN 场景约束(多账号矩阵、短视频为主、整合营销)。 +> 凡模型自补的内容标【假设】,凡来自具体来源的标【源:…】。 +> 🔴 **上游状态(2026-10-07 21:35 补记,别漏读这一行)**:三类输入里,**第 ②类(6 份开源竞品分析)正在按 1b 方法论重写** —— 原版缺产品面(没写「给谁用 / 用户在什么处境下用它 / 界面上具体怎么操作」)。 +> ⇒ 本文档凡引 【源:附卷…】或【源:竞品主份…】的条目都是**待复核状态,⛔ 不得当终稿用**:F5、F7、F8、F9、F13、F10 的后半(Easel 归因回写),§三 三条差位,§四 后两条,§七 该抄八条与该避五条。 +> ⇒ 第 ①类(视频关键帧梳理)是独立证据,不受影响:F1、F2、F3、F4、F6、F14 整条,F10 的前半(四分离复盘)。 +> ⇒ 处理时机:5 份独立分析体重写完成后,拿新版逐条复核上面那份清单。 + +--- + +## 一、一句话 + +**做什么**:给 MCN 机构的内容团队做一套智能体工作台,把「找选题 → 做内容 → 多账号多平台发布 → 投放与商业化留痕 → 复盘回写」串成一条可复用、可追溯到单条素材的链路。 + +**为谁**:MCN 内容负责人、编导与文案、剪辑与投放。面向的是**一个账号矩阵**,不是单个账号。 + +**不做什么**:不做平台自动化代发(发布是人的动作);不自建投放系统(只对接与留痕);不做个人版单账号工具;不做数据仓库。 + +--- + +## 二、这份需求汇总了什么 + +| 来源 | 性质 | 证据等级 | 落点 | +|---|---|---|---| +| AI 内容工作台 2.0 / 3.0(作者「小曾」) | 关键帧视觉梳理,Obsidian 插件形态 | 视频画面级(532 加 772 帧逐帧读) | `参考资料/AI内容工作台_功能点梳理.md`、`参考资料/Bilibili_BV1gsHn6AEk6/`、`参考资料/YouTube_jVHyoCYidLM/` | +| Easel | 开源竞品,源码级 | 文件树加源码加官方文档 | `content-workbench/证据附卷/1b-竞品分析-Easel.md` | +| OpenCreator | 开源竞品,源码级 | 同上(2182 blob) | `…/1b-竞品分析-OpenCreator.md` | +| 文到 AI | 闭源商业产品 | **文档级**(仓库无源码,全仓 5 blob) | `…/1b-竞品分析-文到AI.md` | +| Postiz 与 PostSider | 开源竞品,源码级 | 文件树加源码,含 fork 差异量化 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` | +| 跨项目汇总对比 | 主份,10 节骨架 | 综合上述四份 | `content-workbench/research/1b-竞品分析.md` | + +**证据强度要带着看**:文到 AI 那一列只有文档级证据,它的结论不能与另四个源码级项目同权;AI 内容工作台的结论来自视频画面,能确认「界面上有什么」,不能确认「它内部怎么实现」。 + +--- + +## 三、产品定位与边界 + +一句话定位:**矩阵级的内容生产与经营中枢**,不是又一把写作工具。 + +和已有的三类工具比,差位有三条(这三条也正好是竞品分析主份 §9.3 里写明的三个空白): + +1. **发现热点这一段普遍弱**。做内容的三家里两家只是「有」,做发布的两家几乎不管。【源:竞品主份 §8、§9.3①】 +2. **合规的自动发布是空白**。现在只有「浏览器自动化(有账号风险)」和「官方 OAuth 或只填充(要人工)」两条路,没有第三条。【源:竞品主份 §9.3②】 +3. **做内容与发内容仍是两套产品**,用户要在两处搬一次。机会在只做中间那段可复用的桥,而不是再造一个全链路。【源:竞品主份 §9.3③】 + +本产品选的是第 1 条与第 3 条,第 2 条按 §六 F5 的边界处理:只做分级闸门,不做自动代发。 + +--- + +## 四、为谁做 + +**内容负责人**(主用户):定选题方向、审内容、看矩阵效果。他每天要回答的是「今天哪个账号发什么」。(【源:视频关键帧·对标与热点、发布与经营】) + +**编导与文案**(高频用户):把一个选题做成成稿,走完创作流水线。他要的是「不用记 skill 名字,点就行」。(【源:视频关键帧·创作 Tab;Easel 三层加载设计】) + +**剪辑与投放**(协作用户):拿到成稿做视频,管发布与投留痕。他要的是「素材和文案对得上」。(【假设:视频关键帧里只出现「生成录制卡片」和「收支」,投放侧没有画面证据】) + +--- + +## 五、使用场景 + +按用户故事写,四个槽位缺一不成立(谁、什么处境、要办成什么、得到什么结果)。 + +**S1 找选题** +作为编导,当我面对一个矩阵下十个账号、每天要出三条内容时,我要知道「哪个赛道的哪条内容数据异常地好」,这样我不用逐个平台刷榜。 +【源:视频关键帧·对标博主监控四指标卡与「N 倍平时互动」异常值;竞品主份 §9.3①】 + +**S2 选题进资产库** +作为内容负责人,当我把一条爆款拆完,我要它的「角度、结构、开场白、标题」进资产库,这样下一次创作不是凭空写。 +【源:视频关键帧·拆解与沉淀·资产库;文到 AI 的「能力库」把稳定步骤沉淀为可复用方案】 + +**S3 走完创作流水线** +作为文案,当我要把一条选题做成短视频,我要在同一条流水线里走完「聊思路 → 写文案 → 起标题 → 做封面 → 发布检查 → 生成录制卡片」,不用记每个 skill 的名字。 +【源:视频关键帧·创作 Tab 子流程】 + +**S4 一份母版变多份** +作为运营,当一条母版内容做好,我要它变成矩阵下多个账号、多个平台各自的版本,这样我不用手工改十遍。 +【源:Easel 发布中心「一份母版内容到多平台版本」;文到 AI 卡片工坊「一稿多形态」】 + +**S5 发之前先过闸** +作为内容负责人,当我要把内容交出去发,我要在发之前看到「哪里有风险、具体改哪一句」,而且不可逆的动作必须由人确认。 +【源:Easel 发布前分级闸门(硬拦加软劝);PostSider read-first / draft-first(发布仍是人的动作)】 + +**S6 效果回写** +作为负责人,当一条内容跑完,我要它的表现沉淀回账号画像,这样下一轮选题自己会变准。 +【源:Easel 归因回写账号画像;视频关键帧·数据复盘「四分离」分析】 + +**S7 看整个矩阵** +作为机构负责人,当我的矩阵有二十个账号,我要一个界面回答「每个账号今天该发什么、发了什么、效果如何」。 +【假设:五个竞品都只做单账号或单团队视角,矩阵级视图是推断出来的差位,视频画面里也只看到单账号工作台】 + +**S8 商单与内容对账** +作为商务,当一条内容带了商单,我要内容、发布记录与收支能对上。 +【假设:视频关键帧里有「收支」Tab,但它记录的是什么口径没有画面证据;MCN 结算场景是推断的】 + +--- + +## 六、功能范围 + +每条给功能名、来自哪条场景、优先级、来源。优先级判据只有一句话,不给数字打分。 + +| # | 功能 | 来自 | 优先级 | 来源与说明 | +|---|---|---|---|---| +| F1 | 对标账号监控与爆款异常值识别 | S1 | P0 | 视频关键帧;不做则 S1 整条办不成 | +| F2 | 选题库与灵感速记(落本地知识库) | S1 S2 | P0 | 视频关键帧·首页随手记录加选题 | +| F3 | 评论区洞察找选题 | S1 | P1 | 视频关键帧;不做仍能从 F1 得选题,只是少一路输入 | +| F4 | 爆款拆解与资产库(角度、结构、开场白、标题四库) | S2 | P0 | 视频关键帧·关键差异化;这一条决定了「越用越准」 | +| F5 | 发布前分级闸门(敏感词与事实检测,硬拦加软劝) | S5 | P0 | Easel `content_guard` 加 `persona_gate`;不过闸就不许发 | +| F6 | 创作流水线(聊思路到录制卡片七个环节) | S3 | P0 | 视频关键帧·创作 Tab | +| F7 | 一份母版到多账号多平台版本 | S4 | P0 | Easel 发布中心;不做则 S4 办不成 | +| F8 | 内容与素材的版本管理(改稿新建版本不覆盖) | S3 S4 | P1 | OpenCreator 的「修订产生新版本」;文到 AI 也独立出现过同一条 | +| F9 | 多账号画像与记忆(每账号独立,互不覆盖) | S6 S7 | P0 | Easel 画像六维加记忆作用域收敛到画像目录 | +| F10 | 效果复盘与归因回写 | S6 | P0 | 视频关键帧·四分离复盘;Easel 归因回写 | +| F11 | 矩阵级看板(每账号该发什么、发了什么、效果如何) | S7 | P1 | 【假设】竞品无此形态 | +| F12 | 商单与收支记录、内容对账 | S8 | P2 | 【假设】视频关键帧有「收支」Tab,口径未证实 | +| F13 | 发布留痕与人工确认记录 | S5 | P1 | PostSider 的审计与审批流思路 | +| F14 | 录制卡片与画板(Excalidraw 形态) | S3 | P2 | 视频关键帧·画板模块;不影响场景办成,只是更好用 | + +**六项治理要在每条功能条目里各自交代**(失败恢复路径、持久化范围、并发冲突、幂等、超时迁移目标、不可逆操作二次确认)。这几条在本版只列要求,具体落在②段 P0 条目上。其中「不可逆操作二次确认」与 F5、F13 直接相关:发布、删帖、组织级暂停三类动作必须人来做。【源:PostSider 把 `destructiveHint` 只留给删帖与组织级暂停】 + +--- + +## 七、能力底座(从竞品抄什么、避什么) + +**该抄的八条**(都能追溯到具体项目): + +1. **技能即能力**:技能不是名词,配可运行脚本,成品落盘。【源:Easel 114 技能,含 146 个 `.py`】 +2. **三层加载加 `SKILL.md` 不超过 200 行**:Metadata 常驻、Instructions 触发、Resources 按需。这是让能力持续变多而不炸 prompt 的唯一解。【源:Easel `SKILL-SPEC.md`】 +3. **契约层独立成包**:三端同源,版本号明文可读。【源:OpenCreator `packages/protocol` 与 `protocolVersion`】 +4. **状态机加版本号加幂等键三件套**,并为「远端到底收没收」专设 `unknown_remote_acceptance` 与 `abandoned_unknown` 两个状态。【源:OpenCreator】 +5. **read-first / draft-first**:Agent 可以准备、排期、送审,发布仍是人的动作。这条把「自动化」与「不可逆」分开。【源:PostSider】 +6. **发布前分级闸门**:不可逆的硬拦,可商量的软劝,不做一刀切。【源:Easel】 +7. **本地与免密钥 provider 作一等公民**:用户不必先配 Key 才能开始用。【源:OpenCreator、文到 AI、Easel 共同】 +8. **独立更新清单**:`channel`、逐包 `sha256`、`minimumSupportedVersion`、`allowSkip`、`remindAfterHours`。【源:文到 AI `stable.json`】 + +**该避的五条**: + +避浏览器自动化发平台(账号风控是真实风险,Easel 自己在 README 里承认)。避 README 与发行状态脱钩(文到 AI 的文档停在「尚未发布」,实际已发 10 个版本)。避上游强耦合的薄壳路线(OpenCreator 把 Agent loop 全交给 Codex,一次破坏性变更就可能整体不可用)。避命名双轨(产品改名了,内嵌件还用旧名)。避素材授权未核实就用(一律先设 `draft`)。 + +--- + +## 八、明确不做 + +**第一版不做**:自动代发到平台(走 F5 加 F13 的人确认路径)。矩阵级的自动投放优化。跨机构协作与权限体系。移动端 App。把平台数据抓回来做数仓。 + +**这一版只留的三个入口**(其余先不铺):找选题、走创作流水线、看矩阵复盘。 + +--- + +## 九、假设与风险 + +| # | 假设或风险 | 类型 | 影响面 | +|---|---|---|---| +| A1 | MCN 的账号数在 10 到 50 之间,超出会让 F11 的看板要重新设计 | 假设 | F11、F9 | +| A2 | 平台数据靠官方接口或授权方式拿,不靠抓取 | 假设 | F1、F10;若拿不到,S1 与 S6 要降级 | +| A3 | 收支记录的口径是「内容级」而不是「月级」 | 假设 | F12 | +| A4 | 团队 5 到 20 人,不超过三层审批 | 假设 | F5、F13 | +| R1 | 上游模型或 Agent 引擎的破坏性变更 | 风险 | 全链路;对策是契约层加可用版本回退 | +| R2 | 平台发布规则变动导致合规路线失效 | 风险 | F5、F7;对策是分级闸门加人工确认 | +| R3 | 资产库沉淀质量差,变成垃圾场 | 风险 | F4;对策是入库前设门禁,参照 OpenCreator 模板治理的 `draft` 做法 | +| R4 | 多账号并发写同一份状态互相覆盖 | 风险 | F9;对策是记忆作用域收敛到画像目录,不写全局 | + +--- + +## 十、待复核清单 + +以下 9 条是模型补全的,未经用户确认,不得在②段当事实用: + +1、A1 的账号数区间(10 到 50)。 +2、A2 的数据获取方式(官方接口优先)。 +3、A3 的收支口径。 +4、A4 的团队规模与审批层数。 +5、S7 矩阵级视图是否真的需要,还是先只做单账号复制。 +6、S8 商单对账是否进第一版。 +7、F3 评论洞察的数据来源与频率。 +8、「整合营销」到底含不含投放(若含,需要新增一条场景)。 +9、本产品只服务一个机构自用,还是要做成可交付给别的机构的产品。 + +--- + +## 附:来源对照 + +| 功能或结论 | 主要来源 | +|---|---| +| F1 F2 F3 F4 F6 F10 F14 | `参考资料/AI内容工作台_功能点梳理.md`(视频关键帧梳理) | +| F5 | `…/1b-竞品分析-Easel.md` §8.2 发布安全闸门 | +| F7 F8 | Easel 发布中心;`…/1b-竞品分析-OpenCreator.md` §4.2 与 §十一 | +| F9 | `…/1b-竞品分析-Easel.md` §九 账号画像 | +| F13 | `…/1b-竞品分析-Postiz与PostSider同源双形态.md` §4.1 与 §七 | +| §三 三条差位 | `content-workbench/research/1b-竞品分析.md` §8、§9.3 | +| §七 该抄与该避 | 四份单项目附卷的可借鉴点与风险段 | +| S7 S8 A1—A4 | 【假设】,无外部来源 | + +🔴 **这张表里凡指向 `1b` 系列的行,上游都在重写中**(原因见文首「上游状态」行):F5 / F7 / F8 / F9 / F13、F10 的后半(Easel 归因回写)、§三 三条差位、§七 该抄该避 —— 复核完才能算数;指向视频关键帧梳理的行不受影响(F1 / F2 / F3 / F4 / F6 / F14,以及 F10 的前半四分离复盘)。 + +--- + +*本文档是「MCN 短视频内容整合营销智能体」的①段 1a 需求文档(汇总型)。上游取证见 `content-workbench` 的 1b 系列与 `参考资料/` 下的视频抽帧材料。* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__071c5b.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__071c5b.md new file mode 100644 index 0000000..e78c0e2 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__071c5b.md @@ -0,0 +1,445 @@ +# 2a 产品功能(新版 V2) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 1 子步,产出 `prd/2a-产品功能.md` +> 本版是**重做**,不是润色。上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)。 +> 只读输入:①段 `1a-需求文档.md`(`docs/pm/mcn-shortvideo-agent/research/`)、`1e-使用场景.md`(八条用户故事)、②棒 GPT 意见与采纳决策、第①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、上一版 `2a-产品功能.md`/`2b-界面布局.md`。 +> 判据源:`stage-requirements/references/create-prd.md`(功能清单)+ `references/state-machine.md`(六项治理,落在功能条目内)。 +> 本份只回答「做哪些功能、不做哪些、每条什么优先级、功能归谁」。页面骨架在 `2b-界面布局-新版.md`。 +> ⛔ 全文零视觉词 —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。 + +--- + +## 〇、一屏结论 + +- 功能清单还是 14 条(F1–F14),**编号一个没动**(沿用 `1a` §六,`1e` §四 反向核过)。改的是**归属怎么定**。 +- 上一版的功能归属写在每条末尾的「跨哪些页面」里,判据其实是「用户在哪个页面点它」。本版把判据换成一句可复核的话:**这个功能主要创建或改变哪个核心业务对象**。 +- 按新判据,**三条功能的归属真的变了**:F7 从「P4 与 P5 两头各半」收成 P4 单一归属;F14 从 P2 改成 P4;F8 从「P4、P5」收窄到 P4。 +- 新增一层「核心业务对象字典」(11 个对象),本份第一次有这层。上一版没有它,所以 18 条流转里只有 4 条真把上游产物带到了下游。 +- 两条功能口径写实:F11 从「P1 的功能」改成「待验证/非主链能力」;F12 标 `P2/Deferred`。 +- 三条更结构化的建议(②段要不要并成一份九节的架构基线、六种流转类型要不要进正文、两条新增流转)**没有在做/不做上自作主张** —— 本版先按 GPT 的方向落地,同时在 §九 单列交回用户。 + +--- + +## 一、这份文档怎么组织(三条判据,全篇照这个来) + +**第 1 条 · 功能按使用场景组织,不按页面。** +沿用 2026-10-06 的用户定案。一条场景下可以挂跨好几个页面的功能。理由不是习惯:按页面组织会把跨页场景切碎,也跟①段《使用场景》对不上。 + +**第 2 条 · 功能归属看不出「哪页有按钮」,看「它动的是哪个对象」。** +判据一句话:**这个功能主要创建或改变的核心业务对象是什么,它就归产生那个对象的那一页。** +拿它套一遍就看出差别了 —— F7 产出的是内容版本(`ContentVersion`),所以归 P4;F14 产出的是草稿(`Content`/`Draft`),归 P4;F5 产出的是发布任务(`PublishTask`),归 P5。上一版用「哪页点了它」判,于是 F7 在 P4 与 P5 各落一半,两边都不完整。 + +**第 3 条 · 跨页面只传对象 ID 加必要上下文,不传页面临时状态。** +比如 P1 跳 P7,传的是 `accountId`,不是「刚才点的是哪个账号」这个临时变量。P7 自己拿 `accountId` 去查它的发布记录与表现数据。 +这条治的是现状里两处硬伤(详见 `2b-界面布局-新版.md` §六):P1 → P7 传了参数接收方不读(落错对象),P2 → P4 压根不带内容。 + +--- + +## 二、核心业务对象字典(11 个) + +产品里真正在流动的东西就是这些。每一行写清三件事:它是什么、在哪儿产生、被谁拿走。 + +| 对象 | 是什么 | 产生位置 | 被谁消费 | +|---|---|---|---| +| `Account` 账号 | 矩阵里的一个账号,带它的画像与长期记忆 | P6 | P1、P4、P5、P7、P8 | +| `Benchmark` 对标号 | 被盯住的一个对标账号 | P2(F1 录入监控名单) | P2 | +| `Topic` 选题 | 一条待做/在写/已用的选题,含它的来源 | P2(F1 异常值、F2 选题库、F3 评论洞察) | P4 | +| `Asset` 资产条目 | 拆解出来的可复用写法,分角度/结构/开场白/标题四区 | P3 | P4 | +| `Content` 内容 | 一条从选题长出来的内容,含它的创作环节位置 | P4(F6) | P5、P7 | +| `ContentVersion` 内容版本 | 一次改稿或一次多账号展开产生的一版 | P4(F7、F8) | P5、P8 | +| `PublishTask` 发布任务 | 一次「把这些版本发出去」的任务,含目标账号与平台 | P5(过 F5 闸门后) | P7、P8 | +| `PublishRecord` 发布记录 | 谁在什么时候确认发了哪一版 | P5(F13) | P7、P8 | +| `Performance` 表现数据 | 一条内容发出去之后的真实读数 | P7(从平台读回,读不到则手工录入) | P1、P6、P8 | +| `Review` 复盘结论 | 系统归因加人工裁决后写下的那条结论 | P7(F10) | P1、P2、P6 | +| `Campaign/Order` 商单与收支 | 一条内容带的商单与钱的口径 | P8(F12) | P1、P8 | + +**三条传递规则**(全篇只要写流转就按它写): + +1. 跨页面只传 ID 加必要上下文,不传页面临时状态。 +2. 一个对象只有一个产生位置。别处要用,是去消费它,不是各存一份。 +3. 目标页接到 ID 之后必须能自己把状态恢复出来 —— 恢复不出来,说明这个对象的产生位置写错了。 + +--- + +## 三、功能清单(14 条,按场景) + +字段从上到下固定八样:功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面,最后跟一条「治理」。 + +优先级只给 P0/P1/P2 加一句可复述的判据,⛔ 不填数字(本项目没有任何数据源)。 + +### S1 找选题 + +#### F1 对标账号监控与爆款异常值识别 + +- **功能名**:盯住几个对标账号,把「数据远高于它平时水平」的内容挑出来。 +- **来自哪条场景**:S1 +- **优先级**:P0 —— 判据:不做则 S1 整条办不成。 +- **核心业务对象**:`Benchmark` 对标号(连带产出 `Topic` 候选) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → fetching → hit / miss`。事件=刷新、恢复自动更新;守卫=平台授权有效(🔴 **依赖 A2**,见 §六);失败 ⇒ 迁 `failed`。 +- **验收要点**:录入一个对标号后,能看到它近 3 天的更新;能指出哪几条是异常值(标注了它相对该号平时水平的倍数);刷新失败时有明确提示而不是静默空列表。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=退避重试 3 次后转「手工录入对标号」的降级路径;持久化=监控名单与历史异常值落本地(不落全局);并发=同一对标号同时拉取走队列串行,不并发写;幂等=按「对标号 + 内容标识」去重;超时=`fetching` 上限 90 秒(设计值,实现可调),超时转 `failed`;不可逆=不涉及。 + +#### F2 选题库与灵感速记 + +- **功能名**:随手记下一刻想到的东西,把它收进待做清单。 +- **来自哪条场景**:S1、S2 +- **优先级**:P0 —— 判据:不做则选题无处落地,S1 与 S2 都断在最后一步。 +- **核心业务对象**:`Topic` 选题 +- **归属页**:P2 选题雷达(速记入口在全局可达的位置,见 `2b-界面布局-新版.md` §四) +- **状态流转**:`draft → 待做 → 在写 → 已用 / 弃用`。事件=记录、转待做、转在写、标已用、弃用;守卫=转「已用」需已关联到一条内容;弃用可恢复(可逆)。 +- **验收要点**:连着记 5 条灵感,重启后 5 条都在;一条灵感能被标记为「已用」并追到它变成了哪条内容。 +- **跨哪些页面**:P2(入口全局可达) +- **治理**:失败恢复=本地写入失败时保留输入内容,不丢字;持久化=落本地知识库目录,刷新与重启后仍在;并发=同一人两个入口同时改 ⇒ 乐观重试(写临时文件 + 原子替换 + 回读核对),⛔ 不用文件锁(本机实测会卡死);幂等=同一条灵感重复提交按内容 hash 去重;超时=无中间态;不可逆=不涉及(删除走可恢复的「弃用」)。 + +#### F3 评论区洞察找选题 + +- **功能名**:从一条内容的评论区里,把反复出现的问题挑成选题。 +- **来自哪条场景**:S1 +- **优先级**:P1 —— 判据:不做仍能从 F1 得选题,只是少一路输入。 +- **核心业务对象**:`Topic` 选题(原料是评论里的 `Insight`,它不进对象字典 —— 它只在本功能内部存在,一出候选就变成 `Topic`) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → 抓取中 → 已出候选 → 已采纳 / 忽略`。事件=抓取、采纳、忽略;守卫=设定过「最多获取条数」与「样本排序」;🔴 **依赖待复核第 7 条**(数据来源与频率未定)。 +- **验收要点**:给一条视频,能按「点赞最多」取出前 N 条评论并给出至少一条可采纳的候选选题。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=抓取失败转手工粘贴评论;持久化=候选选题落本地;并发=同一内容同时抓取走队列;幂等=按「评论标识」去重;超时=抓取中上限 60 秒(设计值);不可逆=不涉及。 + +### S2 选题进资产库 + +#### F4 爆款拆解与资产库 + +- **功能名**:把一条爆款的写法拆开,存成下次能直接拿的东西。 +- **来自哪条场景**:S2 +- **优先级**:P0 —— 判据:不做则 S2 整条办不成;`1a` §六 F4 注明「这一条决定了『越用越准』」。 +- **核心业务对象**:`Asset` 资产条目 +- **归属页**:P3 资产库 +- **状态流转**:`未拆 → 拆解中 → 待入库 → 已入库 / 退回`。事件=发起拆解、入库、退回;守卫=入库前过门禁(见治理);退回后原件保留。 + 🔴 资产库本身有四个分区(角度、结构、开场白、标题),各区条目独立流转,互不阻塞。 +- **验收要点**:拆完一条爆款,四个分区里各能看到至少一条新条目;条目的原文与出处可回溯;拿 20 条真实爆款入库,隔一周回来能找回想要的那条。 +- **跨哪些页面**:P3 +- **治理**:失败恢复=拆解失败保留原文,可重试;持久化=入库结果落本地,带原文与出处链接;并发=同一素材重复拆解按素材 hash 幂等;幂等=同一条目重复入库不产生副本;超时=拆解中上限 180 秒(设计值,长任务),超时转 `待入库` 并保留中间结果;不可逆=**入库前设门禁**(对策 R3):无出处的、原文缺失的一律先设 `draft`,`draft` 可删,`已入库` 删除需二次确认。 + +### S3 走完创作流水线 + +#### F6 创作流水线 + +- **功能名**:把一条选题从「聊思路」一路做到成稿,文案、标题、封面齐。 +- **来自哪条场景**:S3 +- **优先级**:P0 —— 判据:不做则 S3 整条办不成。 +- **核心业务对象**:`Content` 内容 +- **归属页**:P4 创作台 +- **状态流转**:`选题态 → 思路态 → 文案态 → 标题态 → 封面态 → 检查态 → 成稿态`;每一态可回退到上一态。事件=推进、回退;守卫=**推进到「检查态」前文案与封面必须都有**(封面缺 ⇒ 提示但不硬阻);成稿态可再编辑(回 `文案态`)。 + 🔴 这条守卫是业务规则,③段原型现在的无条件推进要按它改(现状 `D1`)。 +- **验收要点**:一条选题能一路走到成稿,中途不必离开这一处;每一步的产物都存得住;用户全程不需要自己选技能。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=任一步 AI 调用失败保留已产出内容,可重试该步;持久化=每一步的产物落本地并按内容 id 归档;并发=同一条内容两个窗口同时改 ⇒ 写临时文件 + 原子替换 + 回读核对,检测到覆盖则提示;幂等=重复点「起标题」生成新版本而不覆盖(接 F8);超时=任一步上限 180 秒(设计值),超时保留中间结果;不可逆=不涉及(这一步没有对外动作)。 + +#### F8 内容与素材的版本管理 + +- **功能名**:改稿产生新版本,旧版本还在。 +- **来自哪条场景**:S3、S4 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠手工另存,容易盖掉)。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属收紧**:上一版写「P4、P5」,本版只归 P4。存版本这个动作产出版本对象,版本对象的产生位置在 P4;P5 只是拿到已经存在的版本去发。 +- **状态流转**:`v1 → v2 → … → 当前版`;每个版本可标「当前」。事件=编辑保存、切换当前版;守卫=切换当前版不影响已发布记录指向的版本;终态可再次编辑(回出新版本)。 +- **验收要点**:改一版再改一版,两版都在;已发布的那条记录仍指向它当时用的版本;能看出某一版是基于哪一版改的。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=保存失败保留编辑中内容;持久化=全部版本落本地,不覆盖;并发=同一条内容两处同时保存 ⇒ 后保存的产生新版本,同时提示「上游已变」(对应 1b 里 `stale` 的做法);幂等=同样内容重复保存不产生新版本;超时=无中间态;不可逆=**删除某个版本需二次确认**。 + +#### F14 录制卡片与画板 + +- **功能名**:把成稿变成一张对着讲的知识卡片。 +- **来自哪条场景**:S3 +- **优先级**:P2 —— 判据:不做不影响 S3 办成,只是更好用。 +- **核心业务对象**:`Content` 草稿(产出的是这条内容的一个呈现,不是新对象) +- **归属页**:P4 创作台 🔴 **归属改了**:上一版标 P2,本版归 P4,入口可以留在 P2。 + 判据用第 2 条:它动的是创作过程中的内容生产,不是选题发现能力。P2 能有的只是一颗「开始创作」的动作入口,功能本身不归 P2。 + 这条同时把现状 `D3` 的四处不一致收成一处:①段场景里在、②段功能清单里在、②段页面骨架里在(本版把它写进 P4 的板块)、③段要跟着补进创作环节。 +- **状态流转**:`无 → 已生成 → 已同步`。事件=生成、同步到画板;守卫=成稿态才可生成。 +- **验收要点**:一条成稿能生成卡片;卡片能落到画板里被打开。 +- **跨哪些页面**:P4(入口可在 P2) +- **治理**:失败恢复=生成失败可重试;持久化=卡片与画板落本地;并发=同一内容重复生成按内容版本幂等;幂等=同版本不重复生成;超时=上限 60 秒(设计值);不可逆=不涉及。 + +### S4 一份母版变多份 + +#### F7 一份母版到多账号多平台版本 + +- **功能名**:母版改一次,按各账号各平台的口径各出一版。 +- **来自哪条场景**:S4 +- **优先级**:P0 —— 判据:不做则 S4 整条办不成。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属整条改了**:上一版是「P4 出成稿、P5 展开并逐版确认」,两头各做一半,P4 侧连入口都没有(现状 `C4`/`C6`)。本版一句话分清:**P4 决定发什么版本,P5 决定怎么把这个版本发出去。** + 展开这个动作发生在 P4(母版 → 版本策略 → 账号 × 平台 → 生成各版),P5 只负责拿已经存在的版本去检查、去发。 +- **状态流转**:`母版 → 已展开(多版本)→ 逐版确认 → 就绪`。事件=展开、逐版编辑、确认;守卫=每个版本必须绑一个账号 + 一个平台(沿用 F9 的画像口径);未确认的版本不许进发布闸门。 + 🔴 依据界线(照 1a 复核后的写法):Easel 发布中心**直证的是「多平台」**(一处编辑、八端预览,源码级 + 界面级);**「多账号」的依据是 Easel 的多画像支持加本产品的矩阵需求**,发布中心没看到逐账号变体。 +- **验收要点**:母版改一次,各账号各平台的版本跟着更新;超限的地方当场标出来;改漏了某个账号能被发现。 +- **跨哪些页面**:P4(展开与逐版确认)、P5(拿这些版本去发) +- **治理**:失败恢复=展开中断保留已生成的版本;持久化=每个版本独立落本地;并发=两处同时展开按「母版版本 + 目标账号」幂等;幂等=同母版同账号同平台不重复展开;超时=展开上限 120 秒(设计值);不可逆=不涉及(确认可撤回,未发布的版本可删,删除需二次确认)。 + +### S5 发之前先过闸 + +#### F5 发布前分级闸门 + +- **功能名**:发之前,硬的拦住、软的只提醒。 +- **来自哪条场景**:S5 +- **优先级**:P0 —— 判据:不做则 S5 整条办不成。 +- **核心业务对象**:`PublishTask` 发布任务 +- **归属页**:P5 发布中心 +- **界线(照 1a 复核后的写法,⛔ 不是旧版措辞)**:硬闸管**敏感信息**(账号密钥、内部路径这类),不过就不许发;软闸管**人设一致性**(低于阈值只告警,不阻断)。⚠️ 竞品里**没有「敏感词检测」,也没有「事实检测」**——照旧版写会把功能带偏成一个竞品池里没人做过的「事实核查器」。 +- **状态流转**:`未检 → 检查中 → 通过 / 有硬拦 / 有软劝`。事件=发起检查、改完复检;守卫=有硬拦项时「去发布」不可用;软劝不阻断但要在发布确认页可见。硬拦项改完才能过。 +- **验收要点**:一份带敏感信息的稿子会被拦住且说得出是哪一处;一份人设偏移的稿子只提醒、不拦;改完能复检并通过。 +- **跨哪些页面**:P5 +- **治理**:失败恢复=检查本身失败按**不过**处理(fail-closed,宁拦不放);持久化=每次检查结果留痕,随发布记录一起存;并发=同一内容重复检查以最后一次为准;幂等=同一版本重复检查结果一致;超时=检查上限 60 秒(设计值),超时按不过处理;不可逆=**「去发布」这一步必须人确认**(read-first / draft-first)。 + +#### F13 发布留痕与人工确认记录 + +- **功能名**:谁在什么时候确认发的、发的是哪一版,查得到。 +- **来自哪条场景**:S5 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠聊天记录回溯,且回溯成本高)。 +- **核心业务对象**:`PublishRecord` 发布记录 +- **归属页**:P5 发布中心(产生记录)、P8 记录与对账(查记录) +- **状态流转**:`草稿 → 待审 → 已确认 → 已发布 → 已归档`。事件=送审、确认、登记发布、归档;守卫=`已发布` 需要先有「已确认」记录;**组织级急停**可把任意 `待审` 打回 `草稿`。 +- **验收要点**:每条发布都能查到确认人与时间;能看出这条发的是哪一版;急停能拦住所有待审项,恢复后之前的草稿还在。 +- **跨哪些页面**:P5、P8 +- **治理**:失败恢复=登记失败保留草稿状态;持久化=审计轨迹落本地,只追加不改写;并发=同一内容两处送审按「内容版本」幂等;幂等=重复确认同一版本不产生第二条记录;超时=`待审` 上限 72 小时(设计值),超时提醒发起人,不自动放行;不可逆=**发布、删帖、组织级急停三件事形态不一样,别压成一句**:发布是人的动作;删帖带破坏性标注,需二次确认;急停的触发与恢复都只有人能做。 + +### S6 效果回写 + +#### F9 多账号画像与记忆 + +- **功能名**:每个账号有自己的口径和记忆,互不覆盖。 +- **来自哪条场景**:S6、S7 +- **优先级**:P0 —— 判据:不做则 S6 整条办不成(表现无处可回)。 +- **核心业务对象**:`Account` 账号(连带它的长期记忆) +- **归属页**:P6 账号画像 +- **状态流转**:`空 → 已建 → 使用中 →(复盘回写)→ 使用中`。事件=建画像、编辑、被复盘回写;守卫=一个账号一份画像,账号标识唯一;回写只追加记忆条目,不改历史结论。 +- **验收要点**:两个账号各自的画像互不影响;一条内容复盘后,对应账号的画像里多出一条记忆;并排跑两个账号的创作,谁都不覆盖谁。 +- **跨哪些页面**:P6 +- **治理**:失败恢复=保存失败保留编辑内容;持久化=**记忆作用域收敛到画像目录,⛔ 不写全局文件**(对策 R4:多账号并发写全局会互相覆盖);并发=多账号并行读同一份画像,写只写自己那一份;幂等=同一条记忆重复回写按内容 id 去重;超时=无中间态;不可逆=删除画像需二次确认(会连带删它累积的记忆)。 + +#### F10 效果复盘与归因回写 + +- **功能名**:一条内容跑完,把它的表现读回来,写成这个账号的经验。 +- **来自哪条场景**:S6 +- **优先级**:P0 —— 判据:不做则 S6 办不成,整个闭环断在最后一步。 +- **核心业务对象**:`Review` 复盘结论(原料是 `Performance` 表现数据) +- **归属页**:P7 复盘台 +- **状态流转**:`待复盘 → 读数据中 → 已归因 → 已裁决 → 已回写`。事件=发起复盘、人工裁决、回写;守卫=先有发布记录(F13);**回写前必须人确认归因结论**(`Review.confirmed = true` 才允许回写)。 + 🔴 **顺序写死了**:表现数据 → 系统归因 → 人工裁决 → 允许回写。上一版只写了「回写前必须人确认」,但没说清裁决是回写的前置开关还是只留痕;③段原型因此按「只留痕」实现(现状 `D2`)。本版按业务规则定为**前置开关**:没有人工裁决,回写这一步不成立。 + 🔴 本组**只有 Easel** 做成了这个闭环(源码级),⛔ 不写成「多家都做了」。 +- **验收要点**:一条已发布内容能复盘出结论;结论能回写到对应账号的画像;回写后下一轮做这个账号时能看到这条经验。 +- **跨哪些页面**:P7、P6(回写的落点) +- **治理**:失败恢复=数据读不到时降级为手工录入表现;持久化=复盘结论与回写记录落本地;并发=同一条内容重复复盘按内容 id 幂等;幂等=同一次复盘重复回写不重复追加记忆;超时=读数据上限 90 秒(设计值),超时转手工录入;不可逆=**回写会改画像记忆,需人确认**(不自动写)。 + +### S7 看整个矩阵 + +#### F11 矩阵级看板 + +- **功能名**:一屏回答每个账号今天该发什么、发了什么、效果如何。 +- **来自哪条场景**:S7(🔴 **整条标【假设】**,待复核第 5 条) +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(逐账号点进去看);若第 5 条复核为「不需要矩阵级视图」,本条可整体砍掉。 +- **口径写实(本版改了)**:状态标 **待验证**,定位标 **非主链能力**。它不承担主生产链上的任何一环,也不该被包装成「已经有了的完整功能」。影响页面只有 P1。 +- **核心业务对象**:`Performance` 表现数据(只读,不产生对象) +- **归属页**:P1 矩阵总览 +- **状态流转**:无状态(只读视图)。事件=进入、切换账号、下钻。 +- **验收要点**:一屏能看到矩阵下每个账号的今日状态与效果;数据不新鲜时看得出来。 +- **跨哪些页面**:P1 +- **治理**:失败恢复=数据源不可用时显示「数据未更新」并给出时间戳,⛔ 不显示空白冒充正常;持久化=视图本身不落库,只读上游;并发=只读,无冲突;幂等=只读;超时=无;不可逆=不涉及。 + +### S8 商单与内容对账 + +#### F12 商单与收支记录、内容对账 + +- **功能名**:一条内容带了商单,内容、发布记录和收支对得上。 +- **来自哪条场景**:S8(🔴 **整条标【假设】**,待复核第 6 条;另依赖 **A3**) +- **优先级**:P2/Deferred —— 判据:不做不影响场景办成,只是更好用。本条不进第一版主链,标 `Deferred`,等第 6 条复核结果再定去留。 +- **核心业务对象**:`Campaign/Order` 商单与收支 +- **归属页**:P8 记录与对账 +- **状态流转**:`未登记 → 已登记 → 待结算 → 已结算`。事件=登记、核对、标结算;守卫=`已结算` 需内容与发布记录都已关联;可反结算(可逆)。 +- **验收要点**:一条带商单的内容能查到它的发布记录与收支;对账时不需要翻聊天记录。 +- **跨哪些页面**:P8 +- **治理**:失败恢复=登记失败保留输入;持久化=收支记录落本地;并发=同一条记录两处改按记录 id 幂等;幂等=同一内容同一口径不重复登记;超时=无中间态;不可逆=标「已结算」后修改需二次确认。 + +--- + +## 四、功能归属总表(F1–F14) + +这张表是本版新加的。上一版的归属散在每条末尾的「跨哪些页面」里,没有一处能一眼看全,也就没法复核。 + +| 功能 | 来自 | 核心业务对象 | 归属页 | 与上一版的差异 | +|---|---|---|---|---| +| F1 对标账号监控与爆款异常值识别 | S1 | `Benchmark` | P2 | 无 | +| F2 选题库与灵感速记 | S1 S2 | `Topic` | P2(入口全局可达) | 无 | +| F3 评论区洞察找选题 | S1 | `Topic` | P2 | 无 | +| F4 爆款拆解与资产库 | S2 | `Asset` | P3 | 无 | +| F5 发布前分级闸门 | S5 | `PublishTask` | P5 | 无 | +| F6 创作流水线 | S3 | `Content` | P4 | 无 | +| F7 一份母版到多账号多平台版本 | S4 | `ContentVersion` | **P4** | 🔴 **改了**:从「P4+P5 两头各半」收成 P4 单一归属 | +| F8 内容与素材的版本管理 | S3 S4 | `ContentVersion` | **P4** | 🔴 **改了**:跨页从「P4、P5」收窄为 P4 | +| F9 多账号画像与记忆 | S6 S7 | `Account` | P6 | 无 | +| F10 效果复盘与归因回写 | S6 | `Review` | P7 | 状态流转加了「已裁决」一态(原为三态) | +| F11 矩阵级看板 | S7【假设】 | `Performance` | P1 | 🔴 **口径改了**:标「待验证/非主链能力」 | +| F12 商单与收支记录、内容对账 | S8【假设】 | `Campaign/Order` | P8 | 🔴 **口径改了**:标 `P2/Deferred`,不进第一版主链 | +| F13 发布留痕与人工确认记录 | S5 | `PublishRecord` | P5(产生)/P8(查) | 无 | +| F14 录制卡片与画板 | S3 | `Content`/草稿 | **P4**(入口可在 P2) | 🔴 **改了**:从 P2 改成 P4 | + +八页各自「核心对象」与「不应该负责」两栏在 `2b-界面布局-新版.md` §五,本份不重复。 + +--- + +## 五、与上一版的实质差别(逐条) + +这一版不是同一批句子换了个说法。下面逐条写改在哪,能对照原文核。 + +**结构与层** + +1、**新增「核心业务对象字典」(§二,11 个对象)**。上一版完全没有这一层,`1a` 与 `1e` 里也没有。它是本版所有归属判断和流转契约的地基。 +2、**新增「功能归属总表」(§四)**。上一版没有任何一处能一眼看全 14 条功能的归属。 +3、**新增三条判据(§一)**。上一版只说了「按场景组织、不按页面」,没说归属怎么判、跨页传什么。第 2、3 条是本版第一次写下来。 + +**功能条目** + +4、**每条功能从六字段扩到八字段**,新增「核心业务对象」与「归属页」两栏。原来的「跨哪些页面」保留,但它现在只描述落点,不再承担归属判据。 +5、**F7 归属改了**:从两头各半改成 P4 单一归属,并写死分工「P4 决定发什么版本、P5 决定怎么发」。上一版 `2b:283` 那句「在 P4 出成稿,在 P5 展开并逐版确认」按此作废。 +6、**F14 归属改了**:从 P2 改成 P4,入口可留 P2。上一版 `2a` 现标 P2。 +7、**F8 跨页收窄**:从「P4 创作台、P5 发布中心」改成 P4。 +8、**F11 口径写实**:从一条 P1 的 P1 级功能,改标「待验证/非主链能力」。功能本身没删,但它不再承担主链期待。 +9、**F12 口径写实**:标 `P2/Deferred`,明确不进第一版主链。 +10、**F10 状态流转从三态扩到五态**(加了「已裁决」「已回写」分开),并把「裁决是回写的前置开关」写死。上一版只写「回写前必须人确认」,没写清是开关还是留痕 —— ③段就是照「留痕」实现的(现状 `D2`)。 +11、**F6 的守卫在条目里写实**:明确标出这条守卫要③段改(现状 `D1` 是无条件推进)。 + +**没改的** + +12、14 条功能的编号、来自哪条场景、优先级判据,一个都没动。`1e` §四 的「场景 → 功能」反向核对依然成立。 +13、清单主体**仍按使用场景组织**(沿用 2026-10-06 用户定案),⛔ 没有改成按页面。GPT 的「按业务对象重新解耦」落在**归属判据**上,没落在清单组织方式上 —— 这两件事不同,本版没把它们混成一件事。 +14、六项治理全覆盖照旧,落点仍在功能条目内(§七 给了落点清单)。 +15、§六 的假设依赖、§八 的不做清单对照,条目数照旧(9 条假设、8 条不做对 13 条已拍板项)。 + +--- + +## 六、依赖假设的条目(逐条标出) + +⭐ 1a 的 9 条待复核与 A1–A4 **全部未经用户确认,⛔ 不当事实用**。本份凡依赖它们的条目列在下面,写清「依赖哪条、不成立会怎样」。 + +本版比上一版多说一层:这些假设不成立时,**受影响的核心业务对象也跟着变**,所以影响面不止那一页。 + +| 功能 | 依赖 | 假设内容 | 不成立会怎样 | +|---|---|---|---| +| F1 | **A2** + 待复核第 2 条 | 平台数据靠官方接口或授权方式拿 | 自动拉取这条路断,退化成手工录入对标号;`Benchmark` 与 `Topic` 的来源少一路,S1 的「不用刷榜」打折 | +| F10 | **A2** + 待复核第 2 条 | 同上 | 效果数据读不回来,`Performance` 只能手工录入,`Review` 的归因依据变弱,S6 降级 | +| F11 | **A1** + 待复核第 5 条 | 账号数 10–50;矩阵级视图确实需要 | 账号数超出 ⇒ P1 的组织方式要重设计;视图不需要 ⇒ F11 可整体砍掉,P1 页重画 | +| F9 | **A1** | 账号数 10–50 | 同 F11;且 `Account` 的数量与存储组织要跟着变 | +| F12 | **A3** + 待复核第 3、6 条 | 收支口径是「内容级」;商单对账进不进第一版 | 口径若是月级 ⇒ `Campaign/Order` 的对象粒度要重定,本条整条重做;不进第一版 ⇒ 保持 `Deferred` | +| F5 | **A4** + 待复核第 4 条 | 团队 5–20 人、审批不超过三层 | 审批层数超三层 ⇒ `PublishTask` 的审批模型要重做 | +| F13 | **A4** + 待复核第 4 条 | 同上 | 同上 | +| F3 | 待复核第 7 条 | 评论洞察的数据来源与频率未定 | 数据来源定不下来 ⇒ F3 退成手工粘贴评论 | +| (无功能) | 待复核第 8 条 | 「整合营销」含不含投放 | 若含投放 ⇒ 需要新增一条场景(`1e` §六),本份没有对应功能,⛔ 不编 | +| (策略层) | 待复核第 9 条 | 只服务一个机构自用 vs 可交付产品 | 影响 `1d-产品策略.md` §7、§9 与权限体系是否进第一版,不影响本份功能骨架 | + +**假设三归宿**(方法论要求,⛔ 不许长期悬空):上表 9 条**全部**落在「② 待实现且已排定确认时机」这一档 —— 确认时机统一为「②段收口时由主会话转用户一次性过;未过之前,③段不得把这些条目当硬约束用」。落「① 已确认」的:**无**。落「③ 已按假设落地」的:**无**。 + +--- + +## 七、六项治理覆盖核对 + +判据源 `state-machine.md` 的必答清单。⛔ 不留空,不适用写「不适用」。 + +| 治理项 | 落点(哪些功能显式写了) | 最要紧的一条 | +|---|---|---| +| 失败恢复路径 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F11 F12 F13 F14 | F5 走 **fail-closed**(检查失败按不过处理),本组唯一一条「宁拦不放」 | +| 持久化范围 | 全部 14 条 | F9 的**记忆作用域收敛到画像目录、不写全局**(对策 R4);F13 的审计轨迹**只追加不改写** | +| 并发冲突 | F1 F2 F3 F6 F7 F8 F9 F12 | 统一做法:写临时文件 + 原子替换 + 回读核对,⛔ 不用文件锁(本机实测会卡死) | +| 幂等 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F12 F14 | F4 与 F8 的**重复入库/重复保存不产生副本、也不覆盖旧版** | +| 超时迁移目标 | F1 F3 F4 F5 F6 F7 F10 F13 F14 | F13 的 `待审` 超时**只提醒、不自动放行** —— 不可逆动作不许靠超时自动过 | +| 不可逆操作二次确认 | F4 F5 F8 F9 F10 F12 F13 | F5 + F13:**发布、删帖、组织级急停三件形态不同**,分别按「人的动作 / 二次确认 / 只有人能触发与恢复」处理 | + +补一条方法论要求的分工说明:**发布这个动作本身留在人手里**(read-first / draft-first,源码级);**删帖**带破坏性标注、属需二次确认的一类;**组织级急停**的触发与恢复都只有人能做。⚠️ 三件事的「人来做」形态不一样,⛔ 不压成一句话。 + +--- + +## 八、「不做」清单与①段已拍板项的逐条对照 + +**对照方法**:本份列出的「不做/移出/暂缓」共 **8 条**,逐条对 `1a-需求文档.md` 的已拍板项 **13 条**(来源:§一 不做什么 4 条 + §八 第一版不做 5 条 + §八 三个入口 1 条 + §三 三条差位的取舍结论 1 条 + §六 治理段「人来做」的三件事分开记 3 条 —— 去重后按条计)。 + +| # | 本份的「不做/移出/暂缓」 | 1a 原条目与口径 | 拟改口径 | 理由 | 差异 | +|---|---|---|---|---|---| +| 1 | 不做平台自动化代发 | §一 不做什么;§八 第一版不做 | 不变 | 走 F5 + F13 的人确认路径 | 无 | +| 2 | 不做矩阵级自动投放优化 | §八 第一版不做 | 不变 | 1b 里五家都没这一段证据 | 无 | +| 3 | 不做跨机构协作与权限体系 | §八 第一版不做 | 不变 | A4 假设团队不超过三层审批 | 无 | +| 4 | 不做移动端 App | §八 第一版不做 | 不变 | — | 无 | +| 5 | 不把平台数据抓回来做数仓 | §八 第一版不做 | 不变 | 只对接与留痕 | 无 | +| 6 | 不自建投放系统 | §一 不做什么 | 不变 | 只对接与留痕 | 无 | +| 7 | 不做个人版单账号工具 | §一 不做什么 | 不变 | 面向一个账号矩阵 | 无 | +| 8 | 第一版不铺「三个入口」之外的界面 | §八「这一版只留的三个入口」 | 不变 | 找选题 / 走创作流水线 / 看矩阵复盘 | 无 | + +**结论**:**8 条对照完,差异行 0**。没有一条涉及已拍板项的口径改动,因此没有「与已定决策的差异」表要交用户确认。 + +**一条待确认项**(不是「不做」,是「暂缓」,必须带回收三字段): +本份把 **F12** 标为 `P2/Deferred`。这是一条暂缓。 +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过 +- 结论落点 = 本文件 §三 F12 条目与 §六 依赖表 + +--- + +## 九、待与用户确认项 + +派活单要求:涉及改②段结构的三条「部分采纳」先按 GPT 的方向落地,但必须在文末单列。以下是本份范围内的全部待确认项,逐条给「为什么它没被自己拍板」和回收三字段。 + +**1、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 建议把②段合成一份,九节:导航结构/页面框架/功能清单/核心数据对象/状态机/页面流转契约/业务规则/异常与降级/待决事项。 +本版的处置:**内容照收,形态不收**。九节要的东西本版全部落下去了,只是分布还是两份 —— 导航、页面框架、流转契约进 `2b`;功能清单、数据对象、业务规则、异常降级、待决事项进 `2a`;状态机落在每条功能条目里。合成一份等于把「产品功能」与「界面布局」重新塞回去,而这两份是 2026-10-07 的用户定案。 +为什么不自决:合成会**新增文档层**,属于扩大可见面,得单独拍。 + +**2、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳了**三分类**(对象传递/上下文定位/状态完成),六型没进正文。 +为什么不自决:GPT 没把六型和②段那 20 条流转逐条对齐,直接搬进来就会在同一件事上造出第二份定义。要进就得先把 20 条逐条归型。 + +**3、两条新增流转要不要进②段** +GPT 的 P0 清单里有 `P7 → P1`(复盘结论 → 矩阵待办/异常/最佳内容)与 `P7 → P2`(复盘发现 → 下一轮选题)两条。第①棒逐条盘过的 18 条里**没有这两条** —— 它们是 GPT 新加的。 +本版的处置:写进 `2b` §六 的流转契约,但**逐条标了「新增·待确认」**。理由:不写进去,GPT 主张的那个「复盘反哺」闭环在文档上就是断的,第④步做界面对不上;写进去但不标,等于偷偷扩范围。 +为什么不自决:新增流转是扩范围,得用户点头。 + +**4、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。本版按假设标注,没有把它当事实用。P1 的形态挂在第 5 条上,P8 的第 4 板块挂在第 6 条与 A3 上。 + +**5、「投放」这一段要不要补一条场景** +`1e` §六 明写的未闭环处:`1a` §一 的链路里有「投放」,§四 有「剪辑与投放」这个角色,但 §五 的场景里没有一条是投放岗的。本版不为它出功能(无依据就是编)。 + +**6(沿用上一版,未清):什么算「板块」的判据** +`2b:7` 原来那句「骨架冻结、③段不许新增板块」没有定义「什么算板块」,③段因此能在八页各长一层页壳而机检看不见(现状 `A1`/`A3`)。本版在 `2b` §四 把公共框架显式定义掉了,但**「公共框架 vs 业务板块」这条线本身,最终还要用户认一次**。 + +**回收三字段**(本份全部待确认项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3 条、第 5 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §九 与 `2b-界面布局-新版.md` §十 + +--- + +## 十、页面清单(跨页引用用的 ID) + +本份只写「跨哪些页面」,页面骨架在 `2b-界面布局-新版.md`。为免引用悬空,页 ID 列在这里: + +P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台|P8 记录与对账 + +导航分三组加一个跨组入口,组合方式见 `2b` §三。 + +--- + +## 附:本份自检 + +- [x] 每条功能都追回①段《使用场景》(`1e` S1–S8),14 条全覆盖;`1e` §四 的反向核对(场景 → 功能)依然成立 +- [x] 每条功能八字段齐全(功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面) +- [x] 功能归属有可复核的判据(核心业务对象),不是「哪页有按钮」 +- [x] 优先级只用 P0/P1/P2 加一句判据,零数字 +- [x] 「不做」清单逐条对照①段已拍板项,**给出对照条目数(8 对 13),差异行 0** +- [x] 六项治理全覆盖,且落在功能条目内(§七 给了落点清单) +- [x] 依赖假设的条目逐条标出(§六 9 条),每条带假设状态标注与「不成立会怎样」 +- [x] 待确认项逐条带齐 复核人 / 复核时机 / 结论落点 +- [x] §九 单列了三条「部分采纳」的处置与理由,没有把它们混进正文当结论 +- [x] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现) +- [x] 未重开需求(grill 在①段)、未写页面结构(那是 `2b`)、未新增本段白名单外的文档 +- [x] 只读输入全部是只读使用,没改任何上游文件 + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fa6e07.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fa6e07.md new file mode 100644 index 0000000..44453bd --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fa6e07.md @@ -0,0 +1,563 @@ +# 2a 产品功能(新版 V4) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 1 子步,产出 `prd/2a-产品功能.md` +> 本版在 V3 基础上**把用户 2026-10-09~10 陆续下达的八条口径落进正文**(归属判据换「一类事情放同一页」、资产入库不限页、选题库按分类容纳、记录与对账属复盘不拆、一条内容对应多个发布渠道、账号分内容账号与平台账号两个概念、投放页目标选择两级、F7 展开单位改平台账号 + F13 补「一版一路」)。V3 本身是在 V2 基础上按用户口径同步功能归属(导航一层七项、P8 并入复盘、功能与板块一一对应);V2 是**重做**,不是润色;上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)。 +> V4 的两份依据(口径原文):`用户口径裁决-5条回应.md`(2026-10-09)、`用户口径追加-账号是两个概念.md`(2026-10-10)。 +> 只读输入:①段 `1a-需求文档.md`(`docs/pm/mcn-shortvideo-agent/research/`)、`1e-使用场景.md`(八条用户故事)、②棒 GPT 意见与采纳决策、第①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、V2 版 `2a-产品功能-新版.md`/`2b-界面布局-新版.md`。 +> 判据源:`stage-requirements/references/create-prd.md`(功能清单)+ `references/state-machine.md`(六项治理,落在功能条目内)。 +> 本份只回答「做哪些功能、不做哪些、每条什么优先级、功能归谁」。页面骨架在 `2b-界面布局-新版.md`。 +> ⛔ 全文零视觉词 —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。 +> 🔴 **本版没加功能、没改优先级**:功能清单仍是 14 条(F1–F14),编号一个没动。改的是**判据、对象定义与三条功能的措辞**。 + +--- + +## 〇、一屏结论 + +**V4 最要紧的一句**:**功能没加没减,改的是判据、对象定义与三处措辞。** 八条口径逐条落到 §一/§二/§三,页面侧同步落到 `2b` 与原型。 + +**沿用上一版(V3)的结论**(本版没推翻): + +- 功能清单还是 14 条(F1–F14),**编号一个没动**(沿用 `1a` §六,`1e` §四 反向核过)。 +- 核心业务对象字典是 11 个对象 —— 本版**仍是 11**(账号只拆概念不拆对象,见 §二)。 +- 两条功能口径写实:F11 标「待验证/非主链能力」;F12 标 `P2/Deferred`。 +- 三条更结构化的建议(②段要不要并成一份九节的架构基线、六种流转类型要不要进正文、两条新增流转)**没有在做/不做上自作主张** —— 先按 GPT 的方向落地,同时在 §九 单列交回用户。 + +**V4 本轮追加(2026-10-10,用户八条口径)**: + +- **功能归属的判据换成「一类事情放同一个页面」**(§一 第 2 条重写)。拿它复核七页:**页集合不动**,七页各自都是「一类事」。 +- **资产入库不限页**:`Asset` 的「产生位置」由 P3 改成「**P2/P3/P4 均可**」,并写清「一个对象只有一处产生」管的是**唯一权威数据**,⛔ 不是**写入动作的地点**(§二 对象字典 + §一 第 3 条后新增一句 + §三 F4)。 +- **选题库容纳「对选题有帮助的任何信息」,靠分类区分**:随手记仍落选题库,⛔ 不新增「待整理」状态、⛔ 不做多去向(§三 F2)。分类维度由本版给出方案(**进度 × 类型**两个正交维度),落到 `2b` §五 P2。 +- **记录与对账属复盘**:这一类事就是「发布之后看数据与看收入」,⛔ 不拆页、⛔ 不分区(§三 F12/F13 与 `2b` §五 P7)。 +- **一条内容对应多个发布渠道**:`PublishTask` 的定义由「含目标账号与平台」改成「含**发布渠道**」(渠道 = 平台账号)(§二 对象字典)。 +- **账号分两个概念**:`Account` 改写成**内容账号**(管内容属性:账号设定),**平台不属于它**;**平台账号 = 发布渠道**(带平台 + 登录态 + 授权状态),做成内容账号下的**子项清单**,**不加对象**(仍是 11 个)(§二 对象字典 + §三 F9)。 +- **F7 的展开单位改成平台账号**(一个内容账号下的每个平台账号各一版,守卫同步改「内容账号 + 它的一个平台账号」);**F13 补「一版一路」**(一个渠道只对应一个版本 ⇒ 发布记录的渠道由版本唯一确定,`PublishRecord` **不加渠道字段**)(§三 F7/F13)。 +- **定时发布挂起**:用户 2026-10-10 07:56 逐字「后续具体做投放功能的时候在说」⇒ 本版**不为它加任何功能条目与字段**,只登记在 §九(§九 第 7 项)。 + +**V3 追加(2026-10-09 用户令)**: + +- **P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8;F12、F13 的归属页随之由 P8 改 **P7**(§三 F12/F13、§四 总表、§二 对象字典)。 +- **导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。 +- **功能与板块的对应写成可机检关系**(原型 `FN_HOME`/`FN_MAP`,自检双向核),判据仍是「这个功能主要创建或改变哪个核心业务对象」。功能清单仍是 14 条,编号一个没动。 + +--- + +## 一、这份文档怎么组织(四条判据,全篇照这个来) + +**第 1 条 · 功能按使用场景组织,不按页面。** +沿用 2026-10-06 的用户定案。一条场景下可以挂跨好几个页面的功能。理由不是习惯:按页面组织会把跨页场景切碎,也跟①段《使用场景》对不上。 + +**第 2 条 · 归属看「这是哪一类事」,同类事放同一页。**(🔴 2026-10-09 用户口径换的判据,取代上一版「只看核心业务对象」) +判据一句话:**这个功能干的是哪一类事情,就和做同一类事情的其它功能放在同一页。** +用户原话:「应该是一类事情在一个页面 比如 找选题和做选题就应该在一起 都是选题相关的事情」。 + +拿它复核七页,**页集合一个没动**: + +| 页 | 这一页收的是哪一类事 | 复核结果 | +|---|---|---| +| P1 矩阵总览 | 今天先处理哪件 —— 跨账号的待办与概览 | 一类(一名内容负责人一眼扫全局) | +| P2 选题雷达 | 找选题、拆解选题、把选题推进下一步 —— **选题相关的事** | 一类(找与做同页,正是用户举的例子) | +| P3 资产库 | 资产条目的统一管理(分类分区/检索/维护/引用) | 一类(管资产) | +| P4 创作台 | 一条内容从选题走到成稿,再展开成多平台账号版本 | 一类(做内容) | +| P5 发布中心 | 这批内容怎么发出去:过闸、逐版确认、留痕 | 一类(发出去) | +| P6 账号画像 | 内容账号的设定与它的平台账号(发布渠道) | 一类(管账号) | +| P7 复盘台 | **发布之后看数据与看收入** —— 复盘、发布记录、溯源、对账、商单收支 | 一类(用户原话:发布的目的就是看数据和看收入) | + +⚠️ **判据落地时仍要看核心业务对象 —— 对象是「同一类事」的落地手段,不是判据本身。** +理由:一类事往往就是围着同一个对象转(选题相关的事产 `Topic`、发布相关的事产 `PublishTask`/`PublishRecord`、账号相关的事产 `Account`)。先按「哪一类事」分页,再用「它主要创建或改变哪个对象」逐条钉住归属页,两句话说的是同一件事;**分页时以「哪一类事」为准** —— 用户看得见的是事,看不见的是对象。 +拿对象那一层再核一遍,本版**没有因为换判据而挪页**:F7 仍归 P4、F14 仍归 P4、F5 仍归 P5(这三条是 V2 相对 V1 改的,本版沿用)。 + +**第 3 条 · 跨页面只传对象 ID 加必要上下文,不传页面临时状态。** +比如 P1 跳 P7,传的是 `accountId`,不是「刚才点的是哪个账号」这个临时变量。P7 自己拿 `accountId` 去查它的发布记录与表现数据。 +这条治的是现状里两处硬伤(详见 `2b-界面布局-新版.md` §六):P1 → P7 传了参数接收方不读(落错对象),P2 → P4 压根不带内容。 + +**第 4 条 · 「一个对象只有一处」管的是权威数据,⛔ 不管写入动作发生在哪一页。**(🔴 2026-10-10 用户口径新增,专门堵这一处误读) +一个对象**只有一份权威记录**、只有一处能改它的权威值;但**产生它的写入动作可以在别的页发生**。最直接的一例是资产:任何页(P2 的拆解线索、P3 的拆解、P4 的创作沉淀)都可以**就地入库**,落下来的仍是**同一份**资产条目,统一由资产库页管。 +用户原话:「所有页面有产生资产都可以 随时入库,资产库页是统一管理的地方」。 +⚠️ 别把这条读成「归属页有多个」:**归属页按「谁统一管它」定**(资产仍归 P3),别的页只是**入口**。 + +--- + +## 二、核心业务对象字典(11 个) + +产品里真正在流动的东西就是这些。每一行写清三件事:它是什么、在哪儿产生、被谁拿走。 +🔴 **对象数仍是 11** —— V4 把「账号」拆成两个概念,但**只拆概念不拆对象**:`Account` 改写成**内容账号**,**平台账号**做成它下面的**子项清单**(1 → N),因此不进这张表、也不算新对象。理由见本节末。 + +| 对象 | 是什么 | 产生位置 | 被谁消费 | +|---|---|---|---| +| `Account` 内容账号 | 管**内容属性**的主体:账号设定(定位/风格/受众/偏好与红线/长期记忆)。🔴 **平台不属于它** —— 它下面挂 1 → N 个**平台账号**,平台账号是**子项、不是新对象** | P6 | P1、P4、P5、P7 | +| `Benchmark` 对标号 | 被盯住的一个对标账号 | P2(F1 录入监控名单) | P2 | +| `Topic` 选题 | 选题库里的一条信息(⛔ 不止「一条待做选题」),含它的来源与**分类**(§三 F2) | P2(F1 异常值、F2 选题库、F3 评论洞察) | P4 | +| `Asset` 资产条目 | 拆解出来的可复用写法,分角度/结构/开场白/标题四区 | 🔴 **P2/P3/P4 均可**(任何页拆出资产都可就地入库;资产库页是**统一管理**的地方,⛔ 不是唯一入库口) | P4 | +| `Content` 内容 | 一条从选题长出来的内容,含它的创作环节位置 | P4(F6) | P5、P7 | +| `ContentVersion` 内容版本 | 一次改稿或一次多平台账号展开产生的一版 | P4(F7、F8) | P5、P7 | +| `PublishTask` 发布任务 | 一次「把这些版本发出去」的任务,含**发布渠道**(渠道 = 平台账号) | P5(过 F5 闸门后) | P7 | +| `PublishRecord` 发布记录 | 谁在什么时候确认发了哪一版 | P5(F13) | P7 | +| `Performance` 表现数据 | 一条内容发出去之后的真实读数 | P7(从平台读回,读不到则手工录入) | P1、P6、P7 | +| `Review` 复盘结论 | 系统归因加人工裁决后写下的那条结论 | P7(F10) | P1、P2、P6 | +| `Campaign/Order` 商单与收支 | 一条内容带的商单与钱的口径 | P7(F12) | P1、P7 | + +**平台账号写在这里说清楚(它是子项,不进上表、不进对象计数)**: + +- **内容账号** = 管**内容属性**的(主要是账号设定:内容做成什么样)。定位、风格、受众、偏好与红线、长期记忆都是内容属性;**平台不是**。 +- **平台账号** = **发布的渠道** —— 三方平台上的账号,**发布具体内容用的就是它**。每条带三样:**平台 + 登录态 + 授权状态**。 +- **两者的关系是一对多**:一个内容账号 → N 个平台账号。同一个人设在多个平台运营,靠这条表达。 +- **为什么不做成独立对象**:做成对象的话对象字典要 11 → 12,还要重定它与 `ContentVersion`/`PublishTask`/`PublishRecord` 的边界、把 20 条流转契约重过一遍;换来的只是概念上更整齐。做成子项清单,**对象数不变,照样表达得出「一个人设多个平台号」**。 +- ⚠️ 由此**「渠道」这个词从此有确定含义 = 平台账号**,⛔ 不再用「账号 × 平台」这种把两个概念拼一起的说法。 + +**三条传递规则**(全篇只要写流转就按它写): + +1. 跨页面只传 ID 加必要上下文,不传页面临时状态。 +2. 一个对象只有一处**权威数据**。别处要用,是去消费它,不是各存一份。🔴 这一条管的是**权威数据只有一个源**,⛔ **不管写入动作发生在哪一页** —— 资产条目可以在 P2/P3/P4 任何一页就地入库(写入动作的地点不限),但它的**权威记录只有一份**,统一由资产库页管(§一 第 4 条)。 +3. 目标页接到 ID 之后必须能自己把状态恢复出来 —— 恢复不出来,说明这个对象的产生位置写错了。 + +--- + +## 三、功能清单(14 条,按场景) + +字段从上到下固定八样:功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面,最后跟一条「治理」。 + +优先级只给 P0/P1/P2 加一句可复述的判据,⛔ 不填数字(本项目没有任何数据源)。 + +### S1 找选题 + +#### F1 对标账号监控与爆款异常值识别 + +- **功能名**:盯住几个对标账号,把「数据远高于它平时水平」的内容挑出来。 +- **来自哪条场景**:S1 +- **优先级**:P0 —— 判据:不做则 S1 整条办不成。 +- **核心业务对象**:`Benchmark` 对标号(连带产出 `Topic` 候选) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → fetching → hit / miss`。事件=刷新、恢复自动更新;守卫=平台授权有效(🔴 **依赖 A2**,见 §六);失败 ⇒ 迁 `failed`。 +- **验收要点**:录入一个对标号后,能看到它近 3 天的更新;能指出哪几条是异常值(标注了它相对该号平时水平的倍数);刷新失败时有明确提示而不是静默空列表。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=退避重试 3 次后转「手工录入对标号」的降级路径;持久化=监控名单与历史异常值落本地(不落全局);并发=同一对标号同时拉取走队列串行,不并发写;幂等=按「对标号 + 内容标识」去重;超时=`fetching` 上限 90 秒(设计值,实现可调),超时转 `failed`;不可逆=不涉及。 + +#### F2 选题库与灵感速记 + +- **功能名**:凡是**对选题有帮助的信息**都能收进来,再按分类把它理顺。 +- **来自哪条场景**:S1、S2 +- **优先级**:P0 —— 判据:不做则选题无处落地,S1 与 S2 都断在最后一步。 +- **核心业务对象**:`Topic` 选题(🔴 V4 放宽:一条 `Topic` = **选题库里的一条信息**,⛔ 不止「一条待做选题」) +- **归属页**:P2 选题雷达(速记入口在全局可达的位置,见 `2b-界面布局-新版.md` §四) +- **容纳范围与分类(🔴 2026-10-09 用户口径新定)**: + - **容纳范围**:凡是「对选题有帮助的信息」都收 —— 灵感、对标观察、数据异动、平台风向…(用户原话:「选题库里面可以是对选题有帮助的任何信息 分类区分就好」)。 + - **随手记仍落选题库**:⛔ **不新增「待整理」状态**、⛔ **不做多去向选择**(不要求用户当场判「这是选题还是资产还是对标」)。随手记的默认落点是选题库里的**「灵感」类**。 + - **靠分类区分**:分类是**一条信息的属性**,不是一道中途关卡。两个维度**正交**,都落在选题库内: + - **进度**(沿用现版):`待做/在写/已用` —— 回答「这条做到哪一步了」。 + - **类型**(V4 新增):`选题/对标线索/评论洞察/数据异动/灵感` —— 回答「这条是什么、下一步去哪」,每类自带一个后续动作: + ① **选题** ⇒ 转入创作; + ② **对标线索** ⇒ 去资产库拆解; + ③ **评论洞察** ⇒ 采纳成选题; + ④ **数据异动** ⇒ 参与选题判断(做或不做同题); + ⑤ **灵感** ⇒ 续写,或升级成上面任一类型(**随手记的默认落点**)。 + - ⚠️ 分类的**呈现方式**(放在哪、怎么切)由③段定,②段只定「两个维度、五类、每类的后续动作」。细节见 `2b-界面布局-新版.md` §五 P2。 +- **状态流转**:`draft → 待做 → 在写 → 已用 / 弃用`。事件=记录、转待做、转在写、标已用、弃用;守卫=转「已用」需已关联到一条内容;弃用可恢复(可逆)。🔴 **类型与进度是两个维度**:改类型不改进度,改进度不改类型。 +- **验收要点**:连着记 5 条灵感,重启后 5 条都在;一条灵感能被标记为「已用」并追到它变成了哪条内容;一条灵感能被升级成一个「选题」类条目而**不用换库、不用多选一次去向**;按类型筛一遍,五类各自的后续动作都点得下去。 +- **跨哪些页面**:P2(入口全局可达) +- **治理**:失败恢复=本地写入失败时保留输入内容,不丢字;持久化=落本地知识库目录,刷新与重启后仍在;并发=同一人两个入口同时改 ⇒ 乐观重试(写临时文件 + 原子替换 + 回读核对),⛔ 不用文件锁(本机实测会卡死);幂等=同一条灵感重复提交按内容 hash 去重;超时=无中间态;不可逆=不涉及(删除走可恢复的「弃用」)。 + +#### F3 评论区洞察找选题 + +- **功能名**:从一条内容的评论区里,把反复出现的问题挑成选题。 +- **来自哪条场景**:S1 +- **优先级**:P1 —— 判据:不做仍能从 F1 得选题,只是少一路输入。 +- **核心业务对象**:`Topic` 选题(原料是评论里的 `Insight`,它不进对象字典 —— 它只在本功能内部存在,一出候选就变成 `Topic`) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → 抓取中 → 已出候选 → 已采纳 / 忽略`。事件=抓取、采纳、忽略;守卫=设定过「最多获取条数」与「样本排序」;🔴 **依赖待复核第 7 条**(数据来源与频率未定)。 +- **验收要点**:给一条视频,能按「点赞最多」取出前 N 条评论并给出至少一条可采纳的候选选题。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=抓取失败转手工粘贴评论;持久化=候选选题落本地;并发=同一内容同时抓取走队列;幂等=按「评论标识」去重;超时=抓取中上限 60 秒(设计值);不可逆=不涉及。 + +### S2 选题进资产库 + +#### F4 爆款拆解与资产库 + +- **功能名**:把一条爆款的写法拆开,存成下次能直接拿的东西。 +- **来自哪条场景**:S2 +- **优先级**:P0 —— 判据:不做则 S2 整条办不成;`1a` §六 F4 注明「这一条决定了『越用越准』」。 +- **核心业务对象**:`Asset` 资产条目 +- **归属页**:P3 资产库 🔴 **V4 写清两件事**: + 1. **资产库页的职责是「统一管理」** —— 分类分区、检索、单条详情、来源与引用关系、维护。⛔ 它**不再是唯一的入库口**。 + 2. **入库动作不限页** —— P2(对标内容发起拆解)、P4(创作时沉淀写法)产生的资产都可以**就地入库**;不管在哪一页写进去,落下来的仍是**同一份**资产条目、统一由 P3 管。 + ⚠️ **「入库不限页」⛔ 不等于「归属页有多个」**:归属页按「谁统一管它」定,仍是 P3;别的页只是入口(对应 §一 第 4 条)。 +- **状态流转**:`未拆 → 拆解中 → 待入库 → 已入库 / 退回`。事件=发起拆解、入库、退回;守卫=入库前过门禁(见治理);退回后原件保留。 + 🔴 资产库本身有四个分区(角度、结构、开场白、标题),各区条目独立流转,互不阻塞。 +- **验收要点**:拆完一条爆款,四个分区里各能看到至少一条新条目;条目的原文与出处可回溯;拿 20 条真实爆款入库,隔一周回来能找回想要的那条;**在选题页就地拆解入库的一条,在资产库页照样能检索、能引用**。 +- **跨哪些页面**:P2、P3、P4(入库动作在任一处都能发生)+ P4(消费) +- **治理**:失败恢复=拆解失败保留原文,可重试;持久化=入库结果落本地,带原文与出处链接;并发=同一素材重复拆解按素材 hash 幂等;幂等=同一条目重复入库不产生副本;超时=拆解中上限 180 秒(设计值,长任务),超时转 `待入库` 并保留中间结果;不可逆=**入库前设门禁**(对策 R3):无出处的、原文缺失的一律先设 `draft`,`draft` 可删,`已入库` 删除需二次确认。 + +### S3 走完创作流水线 + +#### F6 创作流水线 + +- **功能名**:把一条选题从「聊思路」一路做到成稿,文案、标题、封面齐。 +- **来自哪条场景**:S3 +- **优先级**:P0 —— 判据:不做则 S3 整条办不成。 +- **核心业务对象**:`Content` 内容 +- **归属页**:P4 创作台 +- **状态流转**:`选题态 → 思路态 → 文案态 → 标题态 → 封面态 → 检查态 → 成稿态`;每一态可回退到上一态。事件=推进、回退;守卫=**推进到「检查态」前文案与封面必须都有**(封面缺 ⇒ 提示但不硬阻);成稿态可再编辑(回 `文案态`)。 + 🔴 这条守卫是业务规则,③段原型现在的无条件推进要按它改(现状 `D1`)。 +- **验收要点**:一条选题能一路走到成稿,中途不必离开这一处;每一步的产物都存得住;用户全程不需要自己选技能。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=任一步 AI 调用失败保留已产出内容,可重试该步;持久化=每一步的产物落本地并按内容 id 归档;并发=同一条内容两个窗口同时改 ⇒ 写临时文件 + 原子替换 + 回读核对,检测到覆盖则提示;幂等=重复点「起标题」生成新版本而不覆盖(接 F8);超时=任一步上限 180 秒(设计值),超时保留中间结果;不可逆=不涉及(这一步没有对外动作)。 + +#### F8 内容与素材的版本管理 + +- **功能名**:改稿产生新版本,旧版本还在。 +- **来自哪条场景**:S3、S4 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠手工另存,容易盖掉)。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属收紧**:上一版写「P4、P5」,本版只归 P4。存版本这个动作产出版本对象,版本对象的产生位置在 P4;P5 只是拿到已经存在的版本去发。 +- **状态流转**:`v1 → v2 → … → 当前版`;每个版本可标「当前」。事件=编辑保存、切换当前版;守卫=切换当前版不影响已发布记录指向的版本;终态可再次编辑(回出新版本)。 +- **验收要点**:改一版再改一版,两版都在;已发布的那条记录仍指向它当时用的版本;能看出某一版是基于哪一版改的。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=保存失败保留编辑中内容;持久化=全部版本落本地,不覆盖;并发=同一条内容两处同时保存 ⇒ 后保存的产生新版本,同时提示「上游已变」(对应 1b 里 `stale` 的做法);幂等=同样内容重复保存不产生新版本;超时=无中间态;不可逆=**删除某个版本需二次确认**。 + +#### F14 录制卡片与画板 + +- **功能名**:把成稿变成一张对着讲的知识卡片。 +- **来自哪条场景**:S3 +- **优先级**:P2 —— 判据:不做不影响 S3 办成,只是更好用。 +- **核心业务对象**:`Content` 草稿(产出的是这条内容的一个呈现,不是新对象) +- **归属页**:P4 创作台 🔴 **归属改了**:上一版标 P2,本版归 P4,入口可以留在 P2。 + 判据用第 2 条:它动的是创作过程中的内容生产,不是选题发现能力。P2 能有的只是一颗「开始创作」的动作入口,功能本身不归 P2。 + 这条同时把现状 `D3` 的四处不一致收成一处:①段场景里在、②段功能清单里在、②段页面骨架里在(本版把它写进 P4 的板块)、③段要跟着补进创作环节。 +- **状态流转**:`无 → 已生成 → 已同步`。事件=生成、同步到画板;守卫=成稿态才可生成。 +- **验收要点**:一条成稿能生成卡片;卡片能落到画板里被打开。 +- **跨哪些页面**:P4(入口可在 P2) +- **治理**:失败恢复=生成失败可重试;持久化=卡片与画板落本地;并发=同一内容重复生成按内容版本幂等;幂等=同版本不重复生成;超时=上限 60 秒(设计值);不可逆=不涉及。 + +### S4 一份母版变多份 + +#### F7 一份母版到多平台账号版本 + +- **功能名**:母版改一次,按各**平台账号**的口径各出一版。 +- **来自哪条场景**:S4 +- **优先级**:P0 —— 判据:不做则 S4 整条办不成。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属整条改了**:上一版是「P4 出成稿、P5 展开并逐版确认」,两头各做一半,P4 侧连入口都没有(现状 `C4`/`C6`)。本版一句话分清:**P4 决定发什么版本,P5 决定怎么把这个版本发出去。** + 展开这个动作发生在 P4(母版 → 版本策略 → **平台账号** → 生成各版),P5 只负责拿已经存在的版本去检查、去发。 +- **展开单位(🔴 2026-10-10 用户口径改)**:**按平台账号展开** —— 一个内容账号下面的**每个平台账号各一版**。 + 用户原话:「**一个内容账号 投放时应该有多个平台账号用于分别投放**」。 + ⛔ 不再写「账号 × 平台」:那是把「内容账号」与「平台」当成两个正交维拼起来,概念分开之后这个组合**天然不存在**(一个抖音号不可能是 B 站号)。 + ⚠️ 「分别投放」是**靠「分别成版」实现的**,⛔ 不是靠「一个版本同时发多处」。 +- **状态流转**:`母版 → 已展开(多版本)→ 逐版确认 → 就绪`。事件=展开、逐版编辑、确认;守卫=**每个版本必须绑一个内容账号 + 它下面的一个平台账号**(上一版写「一个账号 + 一个平台」,V4 按两个概念分开后的口径改);未确认的版本不许进发布闸门。 + 🔴 依据界线(照 1a 复核后的写法):Easel 发布中心**直证的是「多平台」**(一处编辑、八端预览,源码级 + 界面级);**「多账号」的依据是 Easel 的多画像支持加本产品的矩阵需求**,发布中心没看到逐账号变体。 +- **验收要点**:母版改一次,各平台账号的版本跟着更新;一个内容账号下面挂了 3 个平台账号,展开就出 3 版;改漏了某个平台账号能被发现;超限的地方当场标出来。 +- **跨哪些页面**:P4(展开与逐版确认)、P5(拿这些版本去发) +- **治理**:失败恢复=展开中断保留已生成的版本;持久化=每个版本独立落本地;并发=两处同时展开按「母版版本 + 目标平台账号」幂等;幂等=同母版同平台账号不重复展开;超时=展开上限 120 秒(设计值);不可逆=不涉及(确认可撤回,未发布的版本可删,删除需二次确认)。 + +### S5 发之前先过闸 + +#### F5 发布前分级闸门 + +- **功能名**:发之前,硬的拦住、软的只提醒。 +- **来自哪条场景**:S5 +- **优先级**:P0 —— 判据:不做则 S5 整条办不成。 +- **核心业务对象**:`PublishTask` 发布任务 +- **归属页**:P5 发布中心 +- **界线(照 1a 复核后的写法,⛔ 不是旧版措辞)**:硬闸管**敏感信息**(账号密钥、内部路径这类),不过就不许发;软闸管**人设一致性**(低于阈值只告警,不阻断)。⚠️ 竞品里**没有「敏感词检测」,也没有「事实检测」**——照旧版写会把功能带偏成一个竞品池里没人做过的「事实核查器」。 +- **状态流转**:`未检 → 检查中 → 通过 / 有硬拦 / 有软劝`。事件=发起检查、改完复检;守卫=有硬拦项时「去发布」不可用;软劝不阻断但要在发布确认页可见。硬拦项改完才能过。 +- **验收要点**:一份带敏感信息的稿子会被拦住且说得出是哪一处;一份人设偏移的稿子只提醒、不拦;改完能复检并通过。 +- **跨哪些页面**:P5 +- **治理**:失败恢复=检查本身失败按**不过**处理(fail-closed,宁拦不放);持久化=每次检查结果留痕,随发布记录一起存;并发=同一内容重复检查以最后一次为准;幂等=同一版本重复检查结果一致;超时=检查上限 60 秒(设计值),超时按不过处理;不可逆=**「去发布」这一步必须人确认**(read-first / draft-first)。 + +#### F13 发布留痕与人工确认记录 + +- **功能名**:谁在什么时候确认发的、发的是哪一版,查得到。 +- **来自哪条场景**:S5 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠聊天记录回溯,且回溯成本高)。 +- **核心业务对象**:`PublishRecord` 发布记录 +- **归属页**:P5 发布中心(产生记录)、P7 复盘台(查记录 —— 原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **一版一路(🔴 2026-10-10 用户口径新定,V4 显式写出来)**:**一个渠道(=一个平台账号)只对应一个版本。** 因为版本是**按平台账号展开**的(F7),所以「渠道」由版本**唯一确定** ⇒ `PublishRecord` **不加渠道字段**,它记的「哪一版」已经说明是哪个渠道。 + 用户原话:「一条内容对应多个发布渠道」⇒ 主体是**内容**,一条内容对应多个渠道;而每个渠道各有一版、各产生一条发布记录。⛔ 不写成「一个版本同时发多处」。 +- **状态流转**:`草稿 → 待审 → 已确认 → 已发布 → 已归档`。事件=送审、确认、登记发布、归档;守卫=`已发布` 需要先有「已确认」记录;**组织级急停**可把任意 `待审` 打回 `草稿`。 +- **验收要点**:每条发布都能查到确认人与时间;能看出这条发的是哪一版;**一条内容发了 3 个渠道 ⇒ 有 3 条记录,每条记录指向它自己那一版,靠版本就能分清渠道**;急停能拦住所有待审项,恢复后之前的草稿还在。 +- **跨哪些页面**:P5、P7 +- **治理**:失败恢复=登记失败保留草稿状态;持久化=审计轨迹落本地,只追加不改写;并发=同一内容两处送审按「内容版本」幂等;幂等=重复确认同一版本不产生第二条记录;超时=`待审` 上限 72 小时(设计值),超时提醒发起人,不自动放行;不可逆=**发布、删帖、组织级急停三件事形态不一样,别压成一句**:发布是人的动作;删帖带破坏性标注,需二次确认;急停的触发与恢复都只有人能做。 + +### S6 效果回写 + +#### F9 多账号画像、平台账号与记忆 + +- **功能名**:每个**内容账号**有自己的口径和记忆,互不覆盖;它下面的**平台账号**(发布渠道)也在这里维护。 +- **来自哪条场景**:S6、S7 +- **优先级**:P0 —— 判据:不做则 S6 整条办不成(表现无处可回)。 +- **核心业务对象**:`Account` 内容账号(连带它的长期记忆,以及它下面的**平台账号子项**) +- **归属页**:P6 账号画像 +- **界线(🔴 2026-10-10 用户口径新定)**: + - **内容账号管的是内容属性** —— 账号设定(定位/风格/受众/偏好与红线/长期记忆)。**平台不属于它**。 + - **平台账号是发布的渠道** —— 每条带**平台 + 登录态 + 授权状态**。登录态归它(能不能发出去是它的事),内容账号不带登录态。 + - 一个内容账号 1 → N 个平台账号;**同一个人设在多个平台运营**靠这条表达。 +- **状态流转**:`空 → 已建 → 使用中 →(复盘回写)→ 使用中`。事件=建画像、编辑、被复盘回写;守卫=一个账号一份画像,账号标识唯一;回写只追加记忆条目,不改历史结论。 + 🔴 **平台账号子项另有一条状态**:`未接入 → 已登录 / 登录失效 → 已授权 / 授权到期`。守卫=**授权失效的平台账号不许进发布闸门**(P5 发不出去这件事在这里拦)。 +- **验收要点**:两个内容账号各自的画像互不影响;一条内容复盘后,对应账号的画像里多出一条记忆;并排跑两个账号的创作,谁都不覆盖谁;**一个内容账号下面挂 3 个平台账号,各自带自己的登录态与授权状态、互不串台**。 +- **跨哪些页面**:P6 +- **治理**:失败恢复=保存失败保留编辑内容;持久化=**记忆作用域收敛到画像目录,⛔ 不写全局文件**(对策 R4:多账号并发写全局会互相覆盖);并发=多账号并行读同一份画像,写只写自己那一份;幂等=同一条记忆重复回写按内容 id 去重;超时=无中间态;不可逆=删除画像需二次确认(会连带删它累积的记忆与它的平台账号接入信息)。 + +#### F10 效果复盘与归因回写 + +- **功能名**:一条内容跑完,把它的表现读回来,写成这个账号的经验。 +- **来自哪条场景**:S6 +- **优先级**:P0 —— 判据:不做则 S6 办不成,整个闭环断在最后一步。 +- **核心业务对象**:`Review` 复盘结论(原料是 `Performance` 表现数据) +- **归属页**:P7 复盘台 +- **状态流转**:`待复盘 → 读数据中 → 已归因 → 已裁决 → 已回写`。事件=发起复盘、人工裁决、回写;守卫=先有发布记录(F13);**回写前必须人确认归因结论**(`Review.confirmed = true` 才允许回写)。 + 🔴 **顺序写死了**:表现数据 → 系统归因 → 人工裁决 → 允许回写。上一版只写了「回写前必须人确认」,但没说清裁决是回写的前置开关还是只留痕;③段原型因此按「只留痕」实现(现状 `D2`)。本版按业务规则定为**前置开关**:没有人工裁决,回写这一步不成立。 + 🔴 本组**只有 Easel** 做成了这个闭环(源码级),⛔ 不写成「多家都做了」。 +- **验收要点**:一条已发布内容能复盘出结论;结论能回写到对应账号的画像;回写后下一轮做这个账号时能看到这条经验。 +- **跨哪些页面**:P7、P6(回写的落点) +- **治理**:失败恢复=数据读不到时降级为手工录入表现;持久化=复盘结论与回写记录落本地;并发=同一条内容重复复盘按内容 id 幂等;幂等=同一次复盘重复回写不重复追加记忆;超时=读数据上限 90 秒(设计值),超时转手工录入;不可逆=**回写会改画像记忆,需人确认**(不自动写)。 + +### S7 看整个矩阵 + +#### F11 矩阵级看板 + +- **功能名**:一屏回答每个账号今天该发什么、发了什么、效果如何。 +- **来自哪条场景**:S7(🔴 **整条标【假设】**,待复核第 5 条) +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(逐账号点进去看);若第 5 条复核为「不需要矩阵级视图」,本条可整体砍掉。 +- **口径写实(本版改了)**:状态标 **待验证**,定位标 **非主链能力**。它不承担主生产链上的任何一环,也不该被包装成「已经有了的完整功能」。影响页面只有 P1。 +- **核心业务对象**:`Performance` 表现数据(只读,不产生对象) +- **归属页**:P1 矩阵总览 +- **状态流转**:无状态(只读视图)。事件=进入、切换账号、下钻。 +- **验收要点**:一屏能看到矩阵下每个账号的今日状态与效果;数据不新鲜时看得出来。 +- **跨哪些页面**:P1 +- **治理**:失败恢复=数据源不可用时显示「数据未更新」并给出时间戳,⛔ 不显示空白冒充正常;持久化=视图本身不落库,只读上游;并发=只读,无冲突;幂等=只读;超时=无;不可逆=不涉及。 + +### S8 商单与内容对账 + +#### F12 商单与收支记录、内容对账 + +- **功能名**:一条内容带了商单,内容、发布记录和收支对得上。 +- **来自哪条场景**:S8(🔴 **整条标【假设】**,待复核第 6 条;另依赖 **A3**) +- **优先级**:P2/Deferred —— 判据:不做不影响场景办成,只是更好用。本条不进第一版主链,标 `Deferred`,等第 6 条复核结果再定去留。 +- **核心业务对象**:`Campaign/Order` 商单与收支 +- **归属页**:P7 复盘台(原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **状态流转**:`未登记 → 已登记 → 待结算 → 已结算`。事件=登记、核对、标结算;守卫=`已结算` 需内容与发布记录都已关联;可反结算(可逆)。 +- **验收要点**:一条带商单的内容能查到它的发布记录与收支;对账时不需要翻聊天记录。 +- **跨哪些页面**:P7 +- **治理**:失败恢复=登记失败保留输入;持久化=收支记录落本地;并发=同一条记录两处改按记录 id 幂等;幂等=同一内容同一口径不重复登记;超时=无中间态;不可逆=标「已结算」后修改需二次确认。 + +--- + +## 四、功能归属总表(F1–F14) + +这张表是本版新加的。上一版的归属散在每条末尾的「跨哪些页面」里,没有一处能一眼看全,也就没法复核。 + +| 功能 | 来自 | 核心业务对象 | 归属页 | 与上一版的差异 | +|---|---|---|---|---| +| F1 对标账号监控与爆款异常值识别 | S1 | `Benchmark` | P2 | 无 | +| F2 选题库与灵感速记 | S1 S2 | `Topic` | P2(入口全局可达) | 🔴 **V4 改了口径**:容纳范围放宽成「对选题有帮助的任何信息」,靠**进度 × 类型**两个维度分类(⛔ 不新增「待整理」状态) | +| F3 评论区洞察找选题 | S1 | `Topic` | P2 | 无 | +| F4 爆款拆解与资产库 | S2 | `Asset` | P3 | 🔴 **V4 改了**:`Asset` 产生位置由 P3 改成 **P2/P3/P4 均可**;P3 的职责由「入库口」改成「统一管理」 | +| F5 发布前分级闸门 | S5 | `PublishTask` | P5 | 无(对象定义随 §二 更新) | +| F6 创作流水线 | S3 | `Content` | P4 | 无 | +| F7 一份母版到多平台账号版本 | S4 | `ContentVersion` | **P4** | 🔴 **V4 改了**:展开单位由「账号 × 平台」改成**按平台账号展开**;守卫改成「内容账号 + 它的一个平台账号」 | +| F8 内容与素材的版本管理 | S3 S4 | `ContentVersion` | **P4** | 无 | +| F9 多账号画像、平台账号与记忆 | S6 S7 | `Account` | P6 | 🔴 **V4 改了**:功能扩到「平台账号(发布渠道)也在这里维护」;`Account` 改写成**内容账号**,平台账号做成它下面的子项 | +| F10 效果复盘与归因回写 | S6 | `Review` | P7 | 无 | +| F11 矩阵级看板 | S7【假设】 | `Performance` | P1 | 无 | +| F12 商单与收支记录、内容对账 | S8【假设】 | `Campaign/Order` | **P7** | 无(V4 起归属理由由「同类事」给出:发布之后看收入) | +| F13 发布留痕与人工确认记录 | S5 | `PublishRecord` | P5(产生)/**P7**(查) | 🔴 **V4 改了**:补「**一版一路**」—— 渠道由版本唯一确定,`PublishRecord` **不加渠道字段** | +| F14 录制卡片与画板 | S3 | `Content`/草稿 | **P4**(入口可在 P2) | 无 | + +七页各自「核心对象」与「不应该负责」两栏在 `2b-界面布局-新版.md` §五,本份不重复。 + +--- + +## 五、与上一版的实质差别(逐条) + +这一版不是同一批句子换了个说法。下面逐条写改在哪,能对照原文核。 + +**V4 本轮(相对 V3 · 八条口径)** + +1、**归属判据换了一条**(§一 第 2 条):由「看它动的是哪个对象」改成「**这是哪一类事,同类事放同一页**」。对象那层**保留**,但降为**落地手段**。拿新判据复核七页 ⇒ **页集合一个没动**(七页各自都是「一类事」)。 +2、**新增 §一 第 4 条**:「一个对象只有一处」管的是**权威数据**,⛔ 不管写入动作发生在哪一页。这条是**新增**的,上一版没有(它正是「资产入库不限页」与「一处产生」看似打架的根因)。 +3、**`Asset` 的产生位置由 P3 改成「P2/P3/P4 均可」**,并写明资产库页的职责是**统一管理**、不再是唯一入库口(§二 + §三 F4)。 +4、**`Account` 整行重写**(§二):由「矩阵里的一个账号,带它的画像与长期记忆」改成「**内容账号**:管内容属性的主体,**平台不属于它**」;**平台账号**做成它下面的**子项清单**(带平台 + 登录态 + 授权状态),**不加对象**(仍是 11 个)。新增一段专门说明两个概念的分野与「为什么不做成独立对象」。 +5、**`PublishTask` 的定义改了**(§二):由「含目标账号与平台」改成「含**发布渠道**」(渠道 = 平台账号)。 +6、**`Topic` 的定义放宽**(§二):由「一条待做/在写/已用的选题」改成「**选题库里的一条信息**」,并带上**分类**。对应 §三 F2 重写成一个「容纳范围 + 两个正交分类维度(进度 × 类型,五类各带后续动作)」的条目。 +7、**F4 的归属页段落重写**:写清「资产库页=统一管理」与「入库动作不限页」,并明说**「入库不限页」不等于「归属页有多个」**。验收要点与「跨哪些页面」同步。 +8、**F7 改名并改展开单位**:「一份母版到多账号多平台版本」→「**一份母版到多平台账号版本**」;守卫由「一个账号 + 一个平台」改成「**一个内容账号 + 它下面的一个平台账号**」;幂等键同步改成「母版版本 + 目标平台账号」。⛔ 全文不再出现「账号 × 平台」。 +9、**F9 改名并扩范围**:「多账号画像与记忆」→「**多账号画像、平台账号与记忆**」;新增界线段(内容账号管内容属性、平台账号是渠道、登录态归它);新增平台账号子项的状态流转(`未接入 → 已登录 / 登录失效 → 已授权 / 授权到期`)与守卫(授权失效不许进发布闸门)。 +10、**F13 补「一版一路」**:一个渠道只对应一个版本 ⇒ 渠道由版本唯一确定 ⇒ `PublishRecord` **不加渠道字段**。验收要点补「一条内容发 3 个渠道 ⇒ 3 条记录,靠版本分清渠道」。 +11、**§四 总表的「与上一版的差异」栏**重写,把 V2 那批差异折叠进历史(避免一张表里混着三个版本的说法)。 +12、**§九 更新**:上一轮遗留的三条待拍板(账号带不带平台 / `PublishRecord` 带不带渠道字段 / 要不要做定时)**前两条已随本次口径落定**;第三条(定时发布)按用户 2026-10-10 07:56 逐字「后续具体做投放功能的时候在说」**挂起**,并带上回收三字段。 +13、**功能清单仍是 14 条、编号一个没动**,优先级判据一个没改;治理六项覆盖不变。本轮动的是**判据、对象定义与三处措辞**。 + +**V3 本轮(相对 V2)** + +1、**P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8。F12、F13 的归属页随之改:F12 由 P8 改 **P7**;F13 的「查记录」那一头由 P8 改 **P7**(「产生记录」仍在 P5)。 +2、**对象字典的「被谁消费」栏把 P8 全部并入 P7**:`Account`、`ContentVersion`、`PublishTask`、`PublishRecord`、`Performance`、`Campaign/Order` 六行里凡出现 P8 的,一律改 P7(§二)。对象本身一个没增没减,仍是 11 个。 +3、**导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),页集合由八页收成七页。本份只承接它对功能归属的影响;导航表见 `2b` §三。 +4、**功能与板块的对应写成可机检关系**。判据没变(仍看核心业务对象),变的是「每页每个板块承担哪条功能」被逐块写下来并由自检双向核(原型 `FN_HOME`/`FN_MAP`,`2b` 附自检 5b-3)。 +5、**功能清单仍是 14 条、编号一个没动**,优先级判据一个没改。本轮动的是归属页与页集合,不是功能本身。 + +**V2(相对 V1)** + +6、**新增「核心业务对象字典」(§二,11 个对象)**。V1 完全没有这一层,`1a` 与 `1e` 里也没有。它是本版所有归属判断和流转契约的地基。 +7、**新增「功能归属总表」(§四)**。V1 没有任何一处能一眼看全 14 条功能的归属。 +8、**新增三条判据(§一)**。V1 只说了「按场景组织、不按页面」,没说归属怎么判、跨页传什么。第 2、3 条是 V2 第一次写下来。 +9、**每条功能从六字段扩到八字段**,新增「核心业务对象」与「归属页」两栏。原来的「跨哪些页面」保留,但它现在只描述落点,不再承担归属判据。 +10、**F7 归属改了**:从两头各半改成 P4 单一归属,并写死分工「P4 决定发什么版本、P5 决定怎么发」。V1 `2b:283` 那句「在 P4 出成稿,在 P5 展开并逐版确认」按此作废。 +11、**F14 归属改了**:从 P2 改成 P4,入口可留 P2。 +12、**F8 跨页收窄**:从「P4 创作台、P5 发布中心」改成 P4。 +13、**F11 口径写实**:从一条 P1 的 P1 级功能,改标「待验证/非主链能力」。 +14、**F12 口径写实**:标 `P2/Deferred`,明确不进第一版主链。 +15、**F10 状态流转从三态扩到五态**(加了「已裁决」「已回写」分开),并把「裁决是回写的前置开关」写死。V1 只写「回写前必须人确认」,没写清是开关还是留痕 —— ③段就是照「留痕」实现的(现状 `D2`)。 +16、**F6 的守卫在条目里写实**:明确标出这条守卫要③段改(现状 `D1` 是无条件推进)。 + +**两个版本都没改的** + +17、14 条功能的编号、来自哪条场景、优先级判据,一个都没动。`1e` §四 的「场景 → 功能」反向核对依然成立。 +18、清单主体**仍按使用场景组织**(沿用 2026-10-06 用户定案),⛔ 没有改成按页面。GPT 的「按业务对象重新解耦」落在**归属判据**上,没落在清单组织方式上 —— 这两件事不同,没把它们混成一件事。 +19、六项治理全覆盖照旧,落点仍在功能条目内(§七 给了落点清单)。 +20、§六 的假设依赖、§八 的不做清单对照,条目数照旧(9 条假设、8 条不做对 13 条已拍板项)。 + +--- + +## 六、依赖假设的条目(逐条标出) + +⭐ 1a 的 9 条待复核与 A1–A4 **全部未经用户确认,⛔ 不当事实用**。本份凡依赖它们的条目列在下面,写清「依赖哪条、不成立会怎样」。 + +本版比上一版多说一层:这些假设不成立时,**受影响的核心业务对象也跟着变**,所以影响面不止那一页。 + +| 功能 | 依赖 | 假设内容 | 不成立会怎样 | +|---|---|---|---| +| F1 | **A2** + 待复核第 2 条 | 平台数据靠官方接口或授权方式拿 | 自动拉取这条路断,退化成手工录入对标号;`Benchmark` 与 `Topic` 的来源少一路,S1 的「不用刷榜」打折 | +| F10 | **A2** + 待复核第 2 条 | 同上 | 效果数据读不回来,`Performance` 只能手工录入,`Review` 的归因依据变弱,S6 降级 | +| F11 | **A1** + 待复核第 5 条 | 账号数 10–50;矩阵级视图确实需要 | 账号数超出 ⇒ P1 的组织方式要重设计;视图不需要 ⇒ F11 可整体砍掉,P1 页重画 | +| F9 | **A1** | 账号数 10–50 | 同 F11;且 `Account` 的数量与存储组织要跟着变 | +| F12 | **A3** + 待复核第 3、6 条 | 收支口径是「内容级」;商单对账进不进第一版 | 口径若是月级 ⇒ `Campaign/Order` 的对象粒度要重定,本条整条重做;不进第一版 ⇒ 保持 `Deferred` | +| F5 | **A4** + 待复核第 4 条 | 团队 5–20 人、审批不超过三层 | 审批层数超三层 ⇒ `PublishTask` 的审批模型要重做 | +| F13 | **A4** + 待复核第 4 条 | 同上 | 同上 | +| F3 | 待复核第 7 条 | 评论洞察的数据来源与频率未定 | 数据来源定不下来 ⇒ F3 退成手工粘贴评论 | +| (无功能) | 待复核第 8 条 | 「整合营销」含不含投放 | 若含投放 ⇒ 需要新增一条场景(`1e` §六),本份没有对应功能,⛔ 不编 | +| (策略层) | 待复核第 9 条 | 只服务一个机构自用 vs 可交付产品 | 影响 `1d-产品策略.md` §7、§9 与权限体系是否进第一版,不影响本份功能骨架 | + +**假设三归宿**(方法论要求,⛔ 不许长期悬空):上表 9 条**全部**落在「② 待实现且已排定确认时机」这一档 —— 确认时机统一为「②段收口时由主会话转用户一次性过;未过之前,③段不得把这些条目当硬约束用」。落「① 已确认」的:**无**。落「③ 已按假设落地」的:**无**。 + +--- + +## 七、六项治理覆盖核对 + +判据源 `state-machine.md` 的必答清单。⛔ 不留空,不适用写「不适用」。 + +| 治理项 | 落点(哪些功能显式写了) | 最要紧的一条 | +|---|---|---| +| 失败恢复路径 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F11 F12 F13 F14 | F5 走 **fail-closed**(检查失败按不过处理),本组唯一一条「宁拦不放」 | +| 持久化范围 | 全部 14 条 | F9 的**记忆作用域收敛到画像目录、不写全局**(对策 R4);F13 的审计轨迹**只追加不改写** | +| 并发冲突 | F1 F2 F3 F6 F7 F8 F9 F12 | 统一做法:写临时文件 + 原子替换 + 回读核对,⛔ 不用文件锁(本机实测会卡死) | +| 幂等 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F12 F14 | F4 与 F8 的**重复入库/重复保存不产生副本、也不覆盖旧版** | +| 超时迁移目标 | F1 F3 F4 F5 F6 F7 F10 F13 F14 | F13 的 `待审` 超时**只提醒、不自动放行** —— 不可逆动作不许靠超时自动过 | +| 不可逆操作二次确认 | F4 F5 F8 F9 F10 F12 F13 | F5 + F13:**发布、删帖、组织级急停三件形态不同**,分别按「人的动作 / 二次确认 / 只有人能触发与恢复」处理 | + +补一条方法论要求的分工说明:**发布这个动作本身留在人手里**(read-first / draft-first,源码级);**删帖**带破坏性标注、属需二次确认的一类;**组织级急停**的触发与恢复都只有人能做。⚠️ 三件事的「人来做」形态不一样,⛔ 不压成一句话。 + +--- + +## 八、「不做」清单与①段已拍板项的逐条对照 + +**对照方法**:本份列出的「不做/移出/暂缓」共 **8 条**,逐条对 `1a-需求文档.md` 的已拍板项 **13 条**(来源:§一 不做什么 4 条 + §八 第一版不做 5 条 + §八 三个入口 1 条 + §三 三条差位的取舍结论 1 条 + §六 治理段「人来做」的三件事分开记 3 条 —— 去重后按条计)。 + +| # | 本份的「不做/移出/暂缓」 | 1a 原条目与口径 | 拟改口径 | 理由 | 差异 | +|---|---|---|---|---|---| +| 1 | 不做平台自动化代发 | §一 不做什么;§八 第一版不做 | 不变 | 走 F5 + F13 的人确认路径 | 无 | +| 2 | 不做矩阵级自动投放优化 | §八 第一版不做 | 不变 | 1b 里五家都没这一段证据 | 无 | +| 3 | 不做跨机构协作与权限体系 | §八 第一版不做 | 不变 | A4 假设团队不超过三层审批 | 无 | +| 4 | 不做移动端 App | §八 第一版不做 | 不变 | — | 无 | +| 5 | 不把平台数据抓回来做数仓 | §八 第一版不做 | 不变 | 只对接与留痕 | 无 | +| 6 | 不自建投放系统 | §一 不做什么 | 不变 | 只对接与留痕 | 无 | +| 7 | 不做个人版单账号工具 | §一 不做什么 | 不变 | 面向一个账号矩阵 | 无 | +| 8 | 第一版不铺「三个入口」之外的界面 | §八「这一版只留的三个入口」 | 不变 | 找选题 / 走创作流水线 / 看矩阵复盘 | 无 | + +**结论**:**8 条对照完,差异行 0**。没有一条涉及已拍板项的口径改动,因此没有「与已定决策的差异」表要交用户确认。 + +**一条待确认项**(不是「不做」,是「暂缓」,必须带回收三字段): +本份把 **F12** 标为 `P2/Deferred`。这是一条暂缓。 +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过 +- 结论落点 = 本文件 §三 F12 条目与 §六 依赖表 + +--- + +## 九、待与用户确认项 + +派活单要求:涉及改②段结构的三条「部分采纳」先按 GPT 的方向落地,但必须在文末单列。以下是本份范围内的全部待确认项,逐条给「为什么它没被自己拍板」和回收三字段。 + +🔴 **V4 先把上一轮遗留的三条待拍板交代清楚**(它们原本堆在这里没结论): + +- **「账号带不带平台」** ⇒ **已随 2026-10-10 用户口径落定**:账号分**内容账号**与**平台账号**两个概念,平台账号做成内容账号下的子项。本条**不再是待确认项**(§二 + §三 F9)。 +- **「`PublishRecord` 带不带渠道字段」** ⇒ **已落定为「不加」**:靠「一版一路」让渠道由版本唯一确定(§三 F13)。 +- **「要不要做定时发布」** ⇒ **挂起**,见下面第 7 项。 + +**1、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 建议把②段合成一份,九节:导航结构/页面框架/功能清单/核心数据对象/状态机/页面流转契约/业务规则/异常与降级/待决事项。 +本版的处置:**内容照收,形态不收**。九节要的东西本版全部落下去了,只是分布还是两份 —— 导航、页面框架、流转契约进 `2b`;功能清单、数据对象、业务规则、异常降级、待决事项进 `2a`;状态机落在每条功能条目里。合成一份等于把「产品功能」与「界面布局」重新塞回去,而这两份是 2026-10-07 的用户定案。 +为什么不自决:合成会**新增文档层**,属于扩大可见面,得单独拍。 + +**2、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳了**三分类**(对象传递/上下文定位/状态完成),六型没进正文。 +为什么不自决:GPT 没把六型和②段那 20 条流转逐条对齐,直接搬进来就会在同一件事上造出第二份定义。要进就得先把 20 条逐条归型。 + +**3、两条新增流转要不要进②段** +GPT 的 P0 清单里有 `P7 → P1`(复盘结论 → 矩阵待办/异常/最佳内容)与 `P7 → P2`(复盘发现 → 下一轮选题)两条。第①棒逐条盘过的 18 条里**没有这两条** —— 它们是 GPT 新加的。 +本版的处置:写进 `2b` §六 的流转契约,但**逐条标了「新增·待确认」**。理由:不写进去,GPT 主张的那个「复盘反哺」闭环在文档上就是断的,第④步做界面对不上;写进去但不标,等于偷偷扩范围。 +为什么不自决:新增流转是扩范围,得用户点头。 + +**4、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。本版按假设标注,没有把它当事实用。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上。 + +**5、「投放」这一段要不要补一条场景** +`1e` §六 明写的未闭环处:`1a` §一 的链路里有「投放」,§四 有「剪辑与投放」这个角色,但 §五 的场景里没有一条是投放岗的。本版不为它出功能(无依据就是编)。 +⚠️ 与第 7 项**不是同一件事**:本条问的是「有没有一条投放场景」(场景层),第 7 项问的是「要不要做定时发布这个具体能力」(功能层)。 + +**6(沿用上一版,未清):什么算「板块」的判据** +`2b:7` 原来那句「骨架冻结、③段不许新增板块」没有定义「什么算板块」,③段因此能在各页各长一层页壳而机检看不见(现状 `A1`/`A3`)。本版在 `2b` §四 把公共框架显式定义掉了,但**「公共框架 vs 业务板块」这条线本身,最终还要用户认一次**。 + +**7、定时发布:挂起(🔴 V4 新增的登记项)** +用户 2026-10-10 07:56 逐字:「**后续具体做投放功能的时候在说**」。 +⇒ **本版不为它加任何功能条目、字段或状态**(⛔ 不编一条 F15,⛔ 不在 `PublishTask` 里塞排期字段)。 +⇒ 它是**挂起**,不是「不做」:等真做投放功能时再议。挂起期间**谁都不许拿它当已定内容用**。 +- **复核人** = 主会话转用户 +- **复核时机** = 立项做投放功能时(⛔ 不是②段收口时) +- **结论落点** = 本文件 §三 F5/F7 附近 + `2b` §五 P5 + +**回收三字段**(本份第 1–6 项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3 条、第 5 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §九 与 `2b-界面布局-新版.md` §十 + +--- + +## 十、页面清单(跨页引用用的 ID) + +本份只写「跨哪些页面」,页面骨架在 `2b-界面布局-新版.md`。为免引用悬空,页 ID 列在这里: + +P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台 + +**导航是一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。P8 记录与对账**已整页并入 P7 复盘台**,页 ID 里不再有 P8。 + +--- + +## 附:本份自检 + +- [x] 每条功能都追回①段《使用场景》(`1e` S1–S8),14 条全覆盖;`1e` §四 的反向核对(场景 → 功能)依然成立 +- [x] 每条功能八字段齐全(功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面) +- [x] 功能归属有可复核的判据(🔴 V4 换成「一类事情放同一页」,对象降为落地手段),不是「哪页有按钮」 +- [x] **拿新判据复核过七页**:七页各自都是「一类事」,页集合没动(§一 第 2 条的复核表) +- [x] **八条口径逐条落到正文**:① 判据(§一 第 2 条)② 资产入库不限页(§一 第 4 条 + §二 `Asset` + §三 F4)③ 选题库分类(§二 `Topic` + §三 F2)④ 记录与对账属复盘不拆(§三 F12/F13,页面侧落 `2b` §五 P7)⑤ 渠道定义(§二 `PublishTask`)⑥ 账号两个概念(§二 + §三 F9)⑦ 目标选择两级(页面侧落 `2b` §五 P5)⑧ F7 展开单位 + F13 一版一路(§三) +- [x] **对象数仍是 11**:平台账号做成 `Account` 下的子项,没有新增对象 +- [x] 优先级只用 P0/P1/P2 加一句判据,零数字 +- [x] 「不做」清单逐条对照①段已拍板项,**给出对照条目数(8 对 13),差异行 0** +- [x] 六项治理全覆盖,且落在功能条目内(§七 给了落点清单) +- [x] 依赖假设的条目逐条标出(§六 9 条),每条带假设状态标注与「不成立会怎样」 +- [x] 待确认项逐条带齐 复核人 / 复核时机 / 结论落点;**定时发布单列为「挂起」并写明挂牌条件**(§九 第 7 项) +- [x] 上一轮遗留的三条待拍板(账号带不带平台 / `PublishRecord` 渠道字段 / 定时发布)**逐条交代了去向**,不留悬空 +- [x] 功能归属页里不再有 P8:F12 → P7,F13 的查记录那侧 → P7(产生侧仍 P5);对象字典的消费栏同步 +- [x] 每页每个板块承担哪条功能写清,并与 `2b` 的板块清单双向对得上(可机检 `FN_HOME`/`FN_MAP`) +- [x] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现) +- [x] 未重开需求(grill 在①段)、未写页面结构(那是 `2b`)、未新增本段白名单外的文档 +- [x] 只读输入全部是只读使用,没改任何上游文件 + +*(说人话自评:46/50 直接性 10 / 节奏 8 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fc471a.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fc471a.md new file mode 100644 index 0000000..a77a60a --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能-新版__fc471a.md @@ -0,0 +1,458 @@ +# 2a 产品功能(新版 V3) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 1 子步,产出 `prd/2a-产品功能.md` +> 本版在 V2 基础上**按用户口径同步功能归属**(2026-10-09 用户令:导航一层七项、P8 并入复盘、功能与板块一一对应)。V2 本身是**重做**,不是润色;上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)。 +> 只读输入:①段 `1a-需求文档.md`(`docs/pm/mcn-shortvideo-agent/research/`)、`1e-使用场景.md`(八条用户故事)、②棒 GPT 意见与采纳决策、第①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、V2 版 `2a-产品功能-新版.md`/`2b-界面布局-新版.md`。 +> 判据源:`stage-requirements/references/create-prd.md`(功能清单)+ `references/state-machine.md`(六项治理,落在功能条目内)。 +> 本份只回答「做哪些功能、不做哪些、每条什么优先级、功能归谁」。页面骨架在 `2b-界面布局-新版.md`。 +> ⛔ 全文零视觉词 —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。 + +--- + +## 〇、一屏结论 + +- 功能清单还是 14 条(F1–F14),**编号一个没动**(沿用 `1a` §六,`1e` §四 反向核过)。改的是**归属怎么定**。 +- 上一版的功能归属写在每条末尾的「跨哪些页面」里,判据其实是「用户在哪个页面点它」。本版把判据换成一句可复核的话:**这个功能主要创建或改变哪个核心业务对象**。 +- 按新判据,**三条功能的归属真的变了**:F7 从「P4 与 P5 两头各半」收成 P4 单一归属;F14 从 P2 改成 P4;F8 从「P4、P5」收窄到 P4。 +- 新增一层「核心业务对象字典」(11 个对象),本份第一次有这层。上一版没有它,所以 18 条流转里只有 4 条真把上游产物带到了下游。 +- 两条功能口径写实:F11 从「P1 的功能」改成「待验证/非主链能力」;F12 标 `P2/Deferred`。 +- 三条更结构化的建议(②段要不要并成一份九节的架构基线、六种流转类型要不要进正文、两条新增流转)**没有在做/不做上自作主张** —— 本版先按 GPT 的方向落地,同时在 §九 单列交回用户。 + +**V3 本轮追加(2026-10-09 用户令)**: + +- **P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8;F12、F13 的归属页随之由 P8 改 **P7**(§三 F12/F13、§四 总表、§二 对象字典)。 +- **导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。 +- **功能与板块的对应写成可机检关系**(原型 `FN_HOME`/`FN_MAP`,自检双向核),判据仍是「这个功能主要创建或改变哪个核心业务对象」。功能清单仍是 14 条,编号一个没动。 + +--- + +## 一、这份文档怎么组织(三条判据,全篇照这个来) + +**第 1 条 · 功能按使用场景组织,不按页面。** +沿用 2026-10-06 的用户定案。一条场景下可以挂跨好几个页面的功能。理由不是习惯:按页面组织会把跨页场景切碎,也跟①段《使用场景》对不上。 + +**第 2 条 · 功能归属看不出「哪页有按钮」,看「它动的是哪个对象」。** +判据一句话:**这个功能主要创建或改变的核心业务对象是什么,它就归产生那个对象的那一页。** +拿它套一遍就看出差别了 —— F7 产出的是内容版本(`ContentVersion`),所以归 P4;F14 产出的是草稿(`Content`/`Draft`),归 P4;F5 产出的是发布任务(`PublishTask`),归 P5。上一版用「哪页点了它」判,于是 F7 在 P4 与 P5 各落一半,两边都不完整。 + +**第 3 条 · 跨页面只传对象 ID 加必要上下文,不传页面临时状态。** +比如 P1 跳 P7,传的是 `accountId`,不是「刚才点的是哪个账号」这个临时变量。P7 自己拿 `accountId` 去查它的发布记录与表现数据。 +这条治的是现状里两处硬伤(详见 `2b-界面布局-新版.md` §六):P1 → P7 传了参数接收方不读(落错对象),P2 → P4 压根不带内容。 + +--- + +## 二、核心业务对象字典(11 个) + +产品里真正在流动的东西就是这些。每一行写清三件事:它是什么、在哪儿产生、被谁拿走。 + +| 对象 | 是什么 | 产生位置 | 被谁消费 | +|---|---|---|---| +| `Account` 账号 | 矩阵里的一个账号,带它的画像与长期记忆 | P6 | P1、P4、P5、P7 | +| `Benchmark` 对标号 | 被盯住的一个对标账号 | P2(F1 录入监控名单) | P2 | +| `Topic` 选题 | 一条待做/在写/已用的选题,含它的来源 | P2(F1 异常值、F2 选题库、F3 评论洞察) | P4 | +| `Asset` 资产条目 | 拆解出来的可复用写法,分角度/结构/开场白/标题四区 | P3 | P4 | +| `Content` 内容 | 一条从选题长出来的内容,含它的创作环节位置 | P4(F6) | P5、P7 | +| `ContentVersion` 内容版本 | 一次改稿或一次多账号展开产生的一版 | P4(F7、F8) | P5、P7 | +| `PublishTask` 发布任务 | 一次「把这些版本发出去」的任务,含目标账号与平台 | P5(过 F5 闸门后) | P7 | +| `PublishRecord` 发布记录 | 谁在什么时候确认发了哪一版 | P5(F13) | P7 | +| `Performance` 表现数据 | 一条内容发出去之后的真实读数 | P7(从平台读回,读不到则手工录入) | P1、P6、P7 | +| `Review` 复盘结论 | 系统归因加人工裁决后写下的那条结论 | P7(F10) | P1、P2、P6 | +| `Campaign/Order` 商单与收支 | 一条内容带的商单与钱的口径 | P7(F12) | P1、P7 | + +**三条传递规则**(全篇只要写流转就按它写): + +1. 跨页面只传 ID 加必要上下文,不传页面临时状态。 +2. 一个对象只有一个产生位置。别处要用,是去消费它,不是各存一份。 +3. 目标页接到 ID 之后必须能自己把状态恢复出来 —— 恢复不出来,说明这个对象的产生位置写错了。 + +--- + +## 三、功能清单(14 条,按场景) + +字段从上到下固定八样:功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面,最后跟一条「治理」。 + +优先级只给 P0/P1/P2 加一句可复述的判据,⛔ 不填数字(本项目没有任何数据源)。 + +### S1 找选题 + +#### F1 对标账号监控与爆款异常值识别 + +- **功能名**:盯住几个对标账号,把「数据远高于它平时水平」的内容挑出来。 +- **来自哪条场景**:S1 +- **优先级**:P0 —— 判据:不做则 S1 整条办不成。 +- **核心业务对象**:`Benchmark` 对标号(连带产出 `Topic` 候选) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → fetching → hit / miss`。事件=刷新、恢复自动更新;守卫=平台授权有效(🔴 **依赖 A2**,见 §六);失败 ⇒ 迁 `failed`。 +- **验收要点**:录入一个对标号后,能看到它近 3 天的更新;能指出哪几条是异常值(标注了它相对该号平时水平的倍数);刷新失败时有明确提示而不是静默空列表。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=退避重试 3 次后转「手工录入对标号」的降级路径;持久化=监控名单与历史异常值落本地(不落全局);并发=同一对标号同时拉取走队列串行,不并发写;幂等=按「对标号 + 内容标识」去重;超时=`fetching` 上限 90 秒(设计值,实现可调),超时转 `failed`;不可逆=不涉及。 + +#### F2 选题库与灵感速记 + +- **功能名**:随手记下一刻想到的东西,把它收进待做清单。 +- **来自哪条场景**:S1、S2 +- **优先级**:P0 —— 判据:不做则选题无处落地,S1 与 S2 都断在最后一步。 +- **核心业务对象**:`Topic` 选题 +- **归属页**:P2 选题雷达(速记入口在全局可达的位置,见 `2b-界面布局-新版.md` §四) +- **状态流转**:`draft → 待做 → 在写 → 已用 / 弃用`。事件=记录、转待做、转在写、标已用、弃用;守卫=转「已用」需已关联到一条内容;弃用可恢复(可逆)。 +- **验收要点**:连着记 5 条灵感,重启后 5 条都在;一条灵感能被标记为「已用」并追到它变成了哪条内容。 +- **跨哪些页面**:P2(入口全局可达) +- **治理**:失败恢复=本地写入失败时保留输入内容,不丢字;持久化=落本地知识库目录,刷新与重启后仍在;并发=同一人两个入口同时改 ⇒ 乐观重试(写临时文件 + 原子替换 + 回读核对),⛔ 不用文件锁(本机实测会卡死);幂等=同一条灵感重复提交按内容 hash 去重;超时=无中间态;不可逆=不涉及(删除走可恢复的「弃用」)。 + +#### F3 评论区洞察找选题 + +- **功能名**:从一条内容的评论区里,把反复出现的问题挑成选题。 +- **来自哪条场景**:S1 +- **优先级**:P1 —— 判据:不做仍能从 F1 得选题,只是少一路输入。 +- **核心业务对象**:`Topic` 选题(原料是评论里的 `Insight`,它不进对象字典 —— 它只在本功能内部存在,一出候选就变成 `Topic`) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → 抓取中 → 已出候选 → 已采纳 / 忽略`。事件=抓取、采纳、忽略;守卫=设定过「最多获取条数」与「样本排序」;🔴 **依赖待复核第 7 条**(数据来源与频率未定)。 +- **验收要点**:给一条视频,能按「点赞最多」取出前 N 条评论并给出至少一条可采纳的候选选题。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=抓取失败转手工粘贴评论;持久化=候选选题落本地;并发=同一内容同时抓取走队列;幂等=按「评论标识」去重;超时=抓取中上限 60 秒(设计值);不可逆=不涉及。 + +### S2 选题进资产库 + +#### F4 爆款拆解与资产库 + +- **功能名**:把一条爆款的写法拆开,存成下次能直接拿的东西。 +- **来自哪条场景**:S2 +- **优先级**:P0 —— 判据:不做则 S2 整条办不成;`1a` §六 F4 注明「这一条决定了『越用越准』」。 +- **核心业务对象**:`Asset` 资产条目 +- **归属页**:P3 资产库 +- **状态流转**:`未拆 → 拆解中 → 待入库 → 已入库 / 退回`。事件=发起拆解、入库、退回;守卫=入库前过门禁(见治理);退回后原件保留。 + 🔴 资产库本身有四个分区(角度、结构、开场白、标题),各区条目独立流转,互不阻塞。 +- **验收要点**:拆完一条爆款,四个分区里各能看到至少一条新条目;条目的原文与出处可回溯;拿 20 条真实爆款入库,隔一周回来能找回想要的那条。 +- **跨哪些页面**:P3 +- **治理**:失败恢复=拆解失败保留原文,可重试;持久化=入库结果落本地,带原文与出处链接;并发=同一素材重复拆解按素材 hash 幂等;幂等=同一条目重复入库不产生副本;超时=拆解中上限 180 秒(设计值,长任务),超时转 `待入库` 并保留中间结果;不可逆=**入库前设门禁**(对策 R3):无出处的、原文缺失的一律先设 `draft`,`draft` 可删,`已入库` 删除需二次确认。 + +### S3 走完创作流水线 + +#### F6 创作流水线 + +- **功能名**:把一条选题从「聊思路」一路做到成稿,文案、标题、封面齐。 +- **来自哪条场景**:S3 +- **优先级**:P0 —— 判据:不做则 S3 整条办不成。 +- **核心业务对象**:`Content` 内容 +- **归属页**:P4 创作台 +- **状态流转**:`选题态 → 思路态 → 文案态 → 标题态 → 封面态 → 检查态 → 成稿态`;每一态可回退到上一态。事件=推进、回退;守卫=**推进到「检查态」前文案与封面必须都有**(封面缺 ⇒ 提示但不硬阻);成稿态可再编辑(回 `文案态`)。 + 🔴 这条守卫是业务规则,③段原型现在的无条件推进要按它改(现状 `D1`)。 +- **验收要点**:一条选题能一路走到成稿,中途不必离开这一处;每一步的产物都存得住;用户全程不需要自己选技能。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=任一步 AI 调用失败保留已产出内容,可重试该步;持久化=每一步的产物落本地并按内容 id 归档;并发=同一条内容两个窗口同时改 ⇒ 写临时文件 + 原子替换 + 回读核对,检测到覆盖则提示;幂等=重复点「起标题」生成新版本而不覆盖(接 F8);超时=任一步上限 180 秒(设计值),超时保留中间结果;不可逆=不涉及(这一步没有对外动作)。 + +#### F8 内容与素材的版本管理 + +- **功能名**:改稿产生新版本,旧版本还在。 +- **来自哪条场景**:S3、S4 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠手工另存,容易盖掉)。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属收紧**:上一版写「P4、P5」,本版只归 P4。存版本这个动作产出版本对象,版本对象的产生位置在 P4;P5 只是拿到已经存在的版本去发。 +- **状态流转**:`v1 → v2 → … → 当前版`;每个版本可标「当前」。事件=编辑保存、切换当前版;守卫=切换当前版不影响已发布记录指向的版本;终态可再次编辑(回出新版本)。 +- **验收要点**:改一版再改一版,两版都在;已发布的那条记录仍指向它当时用的版本;能看出某一版是基于哪一版改的。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=保存失败保留编辑中内容;持久化=全部版本落本地,不覆盖;并发=同一条内容两处同时保存 ⇒ 后保存的产生新版本,同时提示「上游已变」(对应 1b 里 `stale` 的做法);幂等=同样内容重复保存不产生新版本;超时=无中间态;不可逆=**删除某个版本需二次确认**。 + +#### F14 录制卡片与画板 + +- **功能名**:把成稿变成一张对着讲的知识卡片。 +- **来自哪条场景**:S3 +- **优先级**:P2 —— 判据:不做不影响 S3 办成,只是更好用。 +- **核心业务对象**:`Content` 草稿(产出的是这条内容的一个呈现,不是新对象) +- **归属页**:P4 创作台 🔴 **归属改了**:上一版标 P2,本版归 P4,入口可以留在 P2。 + 判据用第 2 条:它动的是创作过程中的内容生产,不是选题发现能力。P2 能有的只是一颗「开始创作」的动作入口,功能本身不归 P2。 + 这条同时把现状 `D3` 的四处不一致收成一处:①段场景里在、②段功能清单里在、②段页面骨架里在(本版把它写进 P4 的板块)、③段要跟着补进创作环节。 +- **状态流转**:`无 → 已生成 → 已同步`。事件=生成、同步到画板;守卫=成稿态才可生成。 +- **验收要点**:一条成稿能生成卡片;卡片能落到画板里被打开。 +- **跨哪些页面**:P4(入口可在 P2) +- **治理**:失败恢复=生成失败可重试;持久化=卡片与画板落本地;并发=同一内容重复生成按内容版本幂等;幂等=同版本不重复生成;超时=上限 60 秒(设计值);不可逆=不涉及。 + +### S4 一份母版变多份 + +#### F7 一份母版到多账号多平台版本 + +- **功能名**:母版改一次,按各账号各平台的口径各出一版。 +- **来自哪条场景**:S4 +- **优先级**:P0 —— 判据:不做则 S4 整条办不成。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属整条改了**:上一版是「P4 出成稿、P5 展开并逐版确认」,两头各做一半,P4 侧连入口都没有(现状 `C4`/`C6`)。本版一句话分清:**P4 决定发什么版本,P5 决定怎么把这个版本发出去。** + 展开这个动作发生在 P4(母版 → 版本策略 → 账号 × 平台 → 生成各版),P5 只负责拿已经存在的版本去检查、去发。 +- **状态流转**:`母版 → 已展开(多版本)→ 逐版确认 → 就绪`。事件=展开、逐版编辑、确认;守卫=每个版本必须绑一个账号 + 一个平台(沿用 F9 的画像口径);未确认的版本不许进发布闸门。 + 🔴 依据界线(照 1a 复核后的写法):Easel 发布中心**直证的是「多平台」**(一处编辑、八端预览,源码级 + 界面级);**「多账号」的依据是 Easel 的多画像支持加本产品的矩阵需求**,发布中心没看到逐账号变体。 +- **验收要点**:母版改一次,各账号各平台的版本跟着更新;超限的地方当场标出来;改漏了某个账号能被发现。 +- **跨哪些页面**:P4(展开与逐版确认)、P5(拿这些版本去发) +- **治理**:失败恢复=展开中断保留已生成的版本;持久化=每个版本独立落本地;并发=两处同时展开按「母版版本 + 目标账号」幂等;幂等=同母版同账号同平台不重复展开;超时=展开上限 120 秒(设计值);不可逆=不涉及(确认可撤回,未发布的版本可删,删除需二次确认)。 + +### S5 发之前先过闸 + +#### F5 发布前分级闸门 + +- **功能名**:发之前,硬的拦住、软的只提醒。 +- **来自哪条场景**:S5 +- **优先级**:P0 —— 判据:不做则 S5 整条办不成。 +- **核心业务对象**:`PublishTask` 发布任务 +- **归属页**:P5 发布中心 +- **界线(照 1a 复核后的写法,⛔ 不是旧版措辞)**:硬闸管**敏感信息**(账号密钥、内部路径这类),不过就不许发;软闸管**人设一致性**(低于阈值只告警,不阻断)。⚠️ 竞品里**没有「敏感词检测」,也没有「事实检测」**——照旧版写会把功能带偏成一个竞品池里没人做过的「事实核查器」。 +- **状态流转**:`未检 → 检查中 → 通过 / 有硬拦 / 有软劝`。事件=发起检查、改完复检;守卫=有硬拦项时「去发布」不可用;软劝不阻断但要在发布确认页可见。硬拦项改完才能过。 +- **验收要点**:一份带敏感信息的稿子会被拦住且说得出是哪一处;一份人设偏移的稿子只提醒、不拦;改完能复检并通过。 +- **跨哪些页面**:P5 +- **治理**:失败恢复=检查本身失败按**不过**处理(fail-closed,宁拦不放);持久化=每次检查结果留痕,随发布记录一起存;并发=同一内容重复检查以最后一次为准;幂等=同一版本重复检查结果一致;超时=检查上限 60 秒(设计值),超时按不过处理;不可逆=**「去发布」这一步必须人确认**(read-first / draft-first)。 + +#### F13 发布留痕与人工确认记录 + +- **功能名**:谁在什么时候确认发的、发的是哪一版,查得到。 +- **来自哪条场景**:S5 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠聊天记录回溯,且回溯成本高)。 +- **核心业务对象**:`PublishRecord` 发布记录 +- **归属页**:P5 发布中心(产生记录)、P7 复盘台(查记录 —— 原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **状态流转**:`草稿 → 待审 → 已确认 → 已发布 → 已归档`。事件=送审、确认、登记发布、归档;守卫=`已发布` 需要先有「已确认」记录;**组织级急停**可把任意 `待审` 打回 `草稿`。 +- **验收要点**:每条发布都能查到确认人与时间;能看出这条发的是哪一版;急停能拦住所有待审项,恢复后之前的草稿还在。 +- **跨哪些页面**:P5、P7 +- **治理**:失败恢复=登记失败保留草稿状态;持久化=审计轨迹落本地,只追加不改写;并发=同一内容两处送审按「内容版本」幂等;幂等=重复确认同一版本不产生第二条记录;超时=`待审` 上限 72 小时(设计值),超时提醒发起人,不自动放行;不可逆=**发布、删帖、组织级急停三件事形态不一样,别压成一句**:发布是人的动作;删帖带破坏性标注,需二次确认;急停的触发与恢复都只有人能做。 + +### S6 效果回写 + +#### F9 多账号画像与记忆 + +- **功能名**:每个账号有自己的口径和记忆,互不覆盖。 +- **来自哪条场景**:S6、S7 +- **优先级**:P0 —— 判据:不做则 S6 整条办不成(表现无处可回)。 +- **核心业务对象**:`Account` 账号(连带它的长期记忆) +- **归属页**:P6 账号画像 +- **状态流转**:`空 → 已建 → 使用中 →(复盘回写)→ 使用中`。事件=建画像、编辑、被复盘回写;守卫=一个账号一份画像,账号标识唯一;回写只追加记忆条目,不改历史结论。 +- **验收要点**:两个账号各自的画像互不影响;一条内容复盘后,对应账号的画像里多出一条记忆;并排跑两个账号的创作,谁都不覆盖谁。 +- **跨哪些页面**:P6 +- **治理**:失败恢复=保存失败保留编辑内容;持久化=**记忆作用域收敛到画像目录,⛔ 不写全局文件**(对策 R4:多账号并发写全局会互相覆盖);并发=多账号并行读同一份画像,写只写自己那一份;幂等=同一条记忆重复回写按内容 id 去重;超时=无中间态;不可逆=删除画像需二次确认(会连带删它累积的记忆)。 + +#### F10 效果复盘与归因回写 + +- **功能名**:一条内容跑完,把它的表现读回来,写成这个账号的经验。 +- **来自哪条场景**:S6 +- **优先级**:P0 —— 判据:不做则 S6 办不成,整个闭环断在最后一步。 +- **核心业务对象**:`Review` 复盘结论(原料是 `Performance` 表现数据) +- **归属页**:P7 复盘台 +- **状态流转**:`待复盘 → 读数据中 → 已归因 → 已裁决 → 已回写`。事件=发起复盘、人工裁决、回写;守卫=先有发布记录(F13);**回写前必须人确认归因结论**(`Review.confirmed = true` 才允许回写)。 + 🔴 **顺序写死了**:表现数据 → 系统归因 → 人工裁决 → 允许回写。上一版只写了「回写前必须人确认」,但没说清裁决是回写的前置开关还是只留痕;③段原型因此按「只留痕」实现(现状 `D2`)。本版按业务规则定为**前置开关**:没有人工裁决,回写这一步不成立。 + 🔴 本组**只有 Easel** 做成了这个闭环(源码级),⛔ 不写成「多家都做了」。 +- **验收要点**:一条已发布内容能复盘出结论;结论能回写到对应账号的画像;回写后下一轮做这个账号时能看到这条经验。 +- **跨哪些页面**:P7、P6(回写的落点) +- **治理**:失败恢复=数据读不到时降级为手工录入表现;持久化=复盘结论与回写记录落本地;并发=同一条内容重复复盘按内容 id 幂等;幂等=同一次复盘重复回写不重复追加记忆;超时=读数据上限 90 秒(设计值),超时转手工录入;不可逆=**回写会改画像记忆,需人确认**(不自动写)。 + +### S7 看整个矩阵 + +#### F11 矩阵级看板 + +- **功能名**:一屏回答每个账号今天该发什么、发了什么、效果如何。 +- **来自哪条场景**:S7(🔴 **整条标【假设】**,待复核第 5 条) +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(逐账号点进去看);若第 5 条复核为「不需要矩阵级视图」,本条可整体砍掉。 +- **口径写实(本版改了)**:状态标 **待验证**,定位标 **非主链能力**。它不承担主生产链上的任何一环,也不该被包装成「已经有了的完整功能」。影响页面只有 P1。 +- **核心业务对象**:`Performance` 表现数据(只读,不产生对象) +- **归属页**:P1 矩阵总览 +- **状态流转**:无状态(只读视图)。事件=进入、切换账号、下钻。 +- **验收要点**:一屏能看到矩阵下每个账号的今日状态与效果;数据不新鲜时看得出来。 +- **跨哪些页面**:P1 +- **治理**:失败恢复=数据源不可用时显示「数据未更新」并给出时间戳,⛔ 不显示空白冒充正常;持久化=视图本身不落库,只读上游;并发=只读,无冲突;幂等=只读;超时=无;不可逆=不涉及。 + +### S8 商单与内容对账 + +#### F12 商单与收支记录、内容对账 + +- **功能名**:一条内容带了商单,内容、发布记录和收支对得上。 +- **来自哪条场景**:S8(🔴 **整条标【假设】**,待复核第 6 条;另依赖 **A3**) +- **优先级**:P2/Deferred —— 判据:不做不影响场景办成,只是更好用。本条不进第一版主链,标 `Deferred`,等第 6 条复核结果再定去留。 +- **核心业务对象**:`Campaign/Order` 商单与收支 +- **归属页**:P7 复盘台(原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **状态流转**:`未登记 → 已登记 → 待结算 → 已结算`。事件=登记、核对、标结算;守卫=`已结算` 需内容与发布记录都已关联;可反结算(可逆)。 +- **验收要点**:一条带商单的内容能查到它的发布记录与收支;对账时不需要翻聊天记录。 +- **跨哪些页面**:P7 +- **治理**:失败恢复=登记失败保留输入;持久化=收支记录落本地;并发=同一条记录两处改按记录 id 幂等;幂等=同一内容同一口径不重复登记;超时=无中间态;不可逆=标「已结算」后修改需二次确认。 + +--- + +## 四、功能归属总表(F1–F14) + +这张表是本版新加的。上一版的归属散在每条末尾的「跨哪些页面」里,没有一处能一眼看全,也就没法复核。 + +| 功能 | 来自 | 核心业务对象 | 归属页 | 与上一版的差异 | +|---|---|---|---|---| +| F1 对标账号监控与爆款异常值识别 | S1 | `Benchmark` | P2 | 无 | +| F2 选题库与灵感速记 | S1 S2 | `Topic` | P2(入口全局可达) | 无 | +| F3 评论区洞察找选题 | S1 | `Topic` | P2 | 无 | +| F4 爆款拆解与资产库 | S2 | `Asset` | P3 | 无 | +| F5 发布前分级闸门 | S5 | `PublishTask` | P5 | 无 | +| F6 创作流水线 | S3 | `Content` | P4 | 无 | +| F7 一份母版到多账号多平台版本 | S4 | `ContentVersion` | **P4** | 🔴 **改了**:从「P4+P5 两头各半」收成 P4 单一归属 | +| F8 内容与素材的版本管理 | S3 S4 | `ContentVersion` | **P4** | 🔴 **改了**:跨页从「P4、P5」收窄为 P4 | +| F9 多账号画像与记忆 | S6 S7 | `Account` | P6 | 无 | +| F10 效果复盘与归因回写 | S6 | `Review` | P7 | 状态流转加了「已裁决」一态(原为三态) | +| F11 矩阵级看板 | S7【假设】 | `Performance` | P1 | 🔴 **口径改了**:标「待验证/非主链能力」 | +| F12 商单与收支记录、内容对账 | S8【假设】 | `Campaign/Order` | **P7** | 🔴 **口径改了**:标 `P2/Deferred`,不进第一版主链;归属页由 P8 改 **P7**(P8 已并入) | +| F13 发布留痕与人工确认记录 | S5 | `PublishRecord` | P5(产生)/**P7**(查) | 🔴 **改了**:查记录的那一头由 P8 改 **P7**(P8 已并入) | +| F14 录制卡片与画板 | S3 | `Content`/草稿 | **P4**(入口可在 P2) | 🔴 **改了**:从 P2 改成 P4 | + +七页各自「核心对象」与「不应该负责」两栏在 `2b-界面布局-新版.md` §五,本份不重复。 + +--- + +## 五、与上一版的实质差别(逐条) + +这一版不是同一批句子换了个说法。下面逐条写改在哪,能对照原文核。 + +**V3 本轮(相对 V2)** + +1、**P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8。F12、F13 的归属页随之改:F12 由 P8 改 **P7**;F13 的「查记录」那一头由 P8 改 **P7**(「产生记录」仍在 P5)。 +2、**对象字典的「被谁消费」栏把 P8 全部并入 P7**:`Account`、`ContentVersion`、`PublishTask`、`PublishRecord`、`Performance`、`Campaign/Order` 六行里凡出现 P8 的,一律改 P7(§二)。对象本身一个没增没减,仍是 11 个。 +3、**导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),页集合由八页收成七页。本份只承接它对功能归属的影响;导航表见 `2b` §三。 +4、**功能与板块的对应写成可机检关系**。判据没变(仍看核心业务对象),变的是「每页每个板块承担哪条功能」被逐块写下来并由自检双向核(原型 `FN_HOME`/`FN_MAP`,`2b` 附自检 5b-3)。 +5、**功能清单仍是 14 条、编号一个没动**,优先级判据一个没改。本轮动的是归属页与页集合,不是功能本身。 + +**V2(相对 V1)** + +6、**新增「核心业务对象字典」(§二,11 个对象)**。V1 完全没有这一层,`1a` 与 `1e` 里也没有。它是本版所有归属判断和流转契约的地基。 +7、**新增「功能归属总表」(§四)**。V1 没有任何一处能一眼看全 14 条功能的归属。 +8、**新增三条判据(§一)**。V1 只说了「按场景组织、不按页面」,没说归属怎么判、跨页传什么。第 2、3 条是 V2 第一次写下来。 +9、**每条功能从六字段扩到八字段**,新增「核心业务对象」与「归属页」两栏。原来的「跨哪些页面」保留,但它现在只描述落点,不再承担归属判据。 +10、**F7 归属改了**:从两头各半改成 P4 单一归属,并写死分工「P4 决定发什么版本、P5 决定怎么发」。V1 `2b:283` 那句「在 P4 出成稿,在 P5 展开并逐版确认」按此作废。 +11、**F14 归属改了**:从 P2 改成 P4,入口可留 P2。 +12、**F8 跨页收窄**:从「P4 创作台、P5 发布中心」改成 P4。 +13、**F11 口径写实**:从一条 P1 的 P1 级功能,改标「待验证/非主链能力」。 +14、**F12 口径写实**:标 `P2/Deferred`,明确不进第一版主链。 +15、**F10 状态流转从三态扩到五态**(加了「已裁决」「已回写」分开),并把「裁决是回写的前置开关」写死。V1 只写「回写前必须人确认」,没写清是开关还是留痕 —— ③段就是照「留痕」实现的(现状 `D2`)。 +16、**F6 的守卫在条目里写实**:明确标出这条守卫要③段改(现状 `D1` 是无条件推进)。 + +**两个版本都没改的** + +17、14 条功能的编号、来自哪条场景、优先级判据,一个都没动。`1e` §四 的「场景 → 功能」反向核对依然成立。 +18、清单主体**仍按使用场景组织**(沿用 2026-10-06 用户定案),⛔ 没有改成按页面。GPT 的「按业务对象重新解耦」落在**归属判据**上,没落在清单组织方式上 —— 这两件事不同,没把它们混成一件事。 +19、六项治理全覆盖照旧,落点仍在功能条目内(§七 给了落点清单)。 +20、§六 的假设依赖、§八 的不做清单对照,条目数照旧(9 条假设、8 条不做对 13 条已拍板项)。 + +--- + +## 六、依赖假设的条目(逐条标出) + +⭐ 1a 的 9 条待复核与 A1–A4 **全部未经用户确认,⛔ 不当事实用**。本份凡依赖它们的条目列在下面,写清「依赖哪条、不成立会怎样」。 + +本版比上一版多说一层:这些假设不成立时,**受影响的核心业务对象也跟着变**,所以影响面不止那一页。 + +| 功能 | 依赖 | 假设内容 | 不成立会怎样 | +|---|---|---|---| +| F1 | **A2** + 待复核第 2 条 | 平台数据靠官方接口或授权方式拿 | 自动拉取这条路断,退化成手工录入对标号;`Benchmark` 与 `Topic` 的来源少一路,S1 的「不用刷榜」打折 | +| F10 | **A2** + 待复核第 2 条 | 同上 | 效果数据读不回来,`Performance` 只能手工录入,`Review` 的归因依据变弱,S6 降级 | +| F11 | **A1** + 待复核第 5 条 | 账号数 10–50;矩阵级视图确实需要 | 账号数超出 ⇒ P1 的组织方式要重设计;视图不需要 ⇒ F11 可整体砍掉,P1 页重画 | +| F9 | **A1** | 账号数 10–50 | 同 F11;且 `Account` 的数量与存储组织要跟着变 | +| F12 | **A3** + 待复核第 3、6 条 | 收支口径是「内容级」;商单对账进不进第一版 | 口径若是月级 ⇒ `Campaign/Order` 的对象粒度要重定,本条整条重做;不进第一版 ⇒ 保持 `Deferred` | +| F5 | **A4** + 待复核第 4 条 | 团队 5–20 人、审批不超过三层 | 审批层数超三层 ⇒ `PublishTask` 的审批模型要重做 | +| F13 | **A4** + 待复核第 4 条 | 同上 | 同上 | +| F3 | 待复核第 7 条 | 评论洞察的数据来源与频率未定 | 数据来源定不下来 ⇒ F3 退成手工粘贴评论 | +| (无功能) | 待复核第 8 条 | 「整合营销」含不含投放 | 若含投放 ⇒ 需要新增一条场景(`1e` §六),本份没有对应功能,⛔ 不编 | +| (策略层) | 待复核第 9 条 | 只服务一个机构自用 vs 可交付产品 | 影响 `1d-产品策略.md` §7、§9 与权限体系是否进第一版,不影响本份功能骨架 | + +**假设三归宿**(方法论要求,⛔ 不许长期悬空):上表 9 条**全部**落在「② 待实现且已排定确认时机」这一档 —— 确认时机统一为「②段收口时由主会话转用户一次性过;未过之前,③段不得把这些条目当硬约束用」。落「① 已确认」的:**无**。落「③ 已按假设落地」的:**无**。 + +--- + +## 七、六项治理覆盖核对 + +判据源 `state-machine.md` 的必答清单。⛔ 不留空,不适用写「不适用」。 + +| 治理项 | 落点(哪些功能显式写了) | 最要紧的一条 | +|---|---|---| +| 失败恢复路径 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F11 F12 F13 F14 | F5 走 **fail-closed**(检查失败按不过处理),本组唯一一条「宁拦不放」 | +| 持久化范围 | 全部 14 条 | F9 的**记忆作用域收敛到画像目录、不写全局**(对策 R4);F13 的审计轨迹**只追加不改写** | +| 并发冲突 | F1 F2 F3 F6 F7 F8 F9 F12 | 统一做法:写临时文件 + 原子替换 + 回读核对,⛔ 不用文件锁(本机实测会卡死) | +| 幂等 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F12 F14 | F4 与 F8 的**重复入库/重复保存不产生副本、也不覆盖旧版** | +| 超时迁移目标 | F1 F3 F4 F5 F6 F7 F10 F13 F14 | F13 的 `待审` 超时**只提醒、不自动放行** —— 不可逆动作不许靠超时自动过 | +| 不可逆操作二次确认 | F4 F5 F8 F9 F10 F12 F13 | F5 + F13:**发布、删帖、组织级急停三件形态不同**,分别按「人的动作 / 二次确认 / 只有人能触发与恢复」处理 | + +补一条方法论要求的分工说明:**发布这个动作本身留在人手里**(read-first / draft-first,源码级);**删帖**带破坏性标注、属需二次确认的一类;**组织级急停**的触发与恢复都只有人能做。⚠️ 三件事的「人来做」形态不一样,⛔ 不压成一句话。 + +--- + +## 八、「不做」清单与①段已拍板项的逐条对照 + +**对照方法**:本份列出的「不做/移出/暂缓」共 **8 条**,逐条对 `1a-需求文档.md` 的已拍板项 **13 条**(来源:§一 不做什么 4 条 + §八 第一版不做 5 条 + §八 三个入口 1 条 + §三 三条差位的取舍结论 1 条 + §六 治理段「人来做」的三件事分开记 3 条 —— 去重后按条计)。 + +| # | 本份的「不做/移出/暂缓」 | 1a 原条目与口径 | 拟改口径 | 理由 | 差异 | +|---|---|---|---|---|---| +| 1 | 不做平台自动化代发 | §一 不做什么;§八 第一版不做 | 不变 | 走 F5 + F13 的人确认路径 | 无 | +| 2 | 不做矩阵级自动投放优化 | §八 第一版不做 | 不变 | 1b 里五家都没这一段证据 | 无 | +| 3 | 不做跨机构协作与权限体系 | §八 第一版不做 | 不变 | A4 假设团队不超过三层审批 | 无 | +| 4 | 不做移动端 App | §八 第一版不做 | 不变 | — | 无 | +| 5 | 不把平台数据抓回来做数仓 | §八 第一版不做 | 不变 | 只对接与留痕 | 无 | +| 6 | 不自建投放系统 | §一 不做什么 | 不变 | 只对接与留痕 | 无 | +| 7 | 不做个人版单账号工具 | §一 不做什么 | 不变 | 面向一个账号矩阵 | 无 | +| 8 | 第一版不铺「三个入口」之外的界面 | §八「这一版只留的三个入口」 | 不变 | 找选题 / 走创作流水线 / 看矩阵复盘 | 无 | + +**结论**:**8 条对照完,差异行 0**。没有一条涉及已拍板项的口径改动,因此没有「与已定决策的差异」表要交用户确认。 + +**一条待确认项**(不是「不做」,是「暂缓」,必须带回收三字段): +本份把 **F12** 标为 `P2/Deferred`。这是一条暂缓。 +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过 +- 结论落点 = 本文件 §三 F12 条目与 §六 依赖表 + +--- + +## 九、待与用户确认项 + +派活单要求:涉及改②段结构的三条「部分采纳」先按 GPT 的方向落地,但必须在文末单列。以下是本份范围内的全部待确认项,逐条给「为什么它没被自己拍板」和回收三字段。 + +**1、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 建议把②段合成一份,九节:导航结构/页面框架/功能清单/核心数据对象/状态机/页面流转契约/业务规则/异常与降级/待决事项。 +本版的处置:**内容照收,形态不收**。九节要的东西本版全部落下去了,只是分布还是两份 —— 导航、页面框架、流转契约进 `2b`;功能清单、数据对象、业务规则、异常降级、待决事项进 `2a`;状态机落在每条功能条目里。合成一份等于把「产品功能」与「界面布局」重新塞回去,而这两份是 2026-10-07 的用户定案。 +为什么不自决:合成会**新增文档层**,属于扩大可见面,得单独拍。 + +**2、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳了**三分类**(对象传递/上下文定位/状态完成),六型没进正文。 +为什么不自决:GPT 没把六型和②段那 20 条流转逐条对齐,直接搬进来就会在同一件事上造出第二份定义。要进就得先把 20 条逐条归型。 + +**3、两条新增流转要不要进②段** +GPT 的 P0 清单里有 `P7 → P1`(复盘结论 → 矩阵待办/异常/最佳内容)与 `P7 → P2`(复盘发现 → 下一轮选题)两条。第①棒逐条盘过的 18 条里**没有这两条** —— 它们是 GPT 新加的。 +本版的处置:写进 `2b` §六 的流转契约,但**逐条标了「新增·待确认」**。理由:不写进去,GPT 主张的那个「复盘反哺」闭环在文档上就是断的,第④步做界面对不上;写进去但不标,等于偷偷扩范围。 +为什么不自决:新增流转是扩范围,得用户点头。 + +**4、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。本版按假设标注,没有把它当事实用。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上。 + +**5、「投放」这一段要不要补一条场景** +`1e` §六 明写的未闭环处:`1a` §一 的链路里有「投放」,§四 有「剪辑与投放」这个角色,但 §五 的场景里没有一条是投放岗的。本版不为它出功能(无依据就是编)。 + +**6(沿用上一版,未清):什么算「板块」的判据** +`2b:7` 原来那句「骨架冻结、③段不许新增板块」没有定义「什么算板块」,③段因此能在各页各长一层页壳而机检看不见(现状 `A1`/`A3`)。本版在 `2b` §四 把公共框架显式定义掉了,但**「公共框架 vs 业务板块」这条线本身,最终还要用户认一次**。 + +**回收三字段**(本份全部待确认项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3 条、第 5 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §九 与 `2b-界面布局-新版.md` §十 + +--- + +## 十、页面清单(跨页引用用的 ID) + +本份只写「跨哪些页面」,页面骨架在 `2b-界面布局-新版.md`。为免引用悬空,页 ID 列在这里: + +P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台 + +**导航是一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。P8 记录与对账**已整页并入 P7 复盘台**,页 ID 里不再有 P8。 + +--- + +## 附:本份自检 + +- [x] 每条功能都追回①段《使用场景》(`1e` S1–S8),14 条全覆盖;`1e` §四 的反向核对(场景 → 功能)依然成立 +- [x] 每条功能八字段齐全(功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面) +- [x] 功能归属有可复核的判据(核心业务对象),不是「哪页有按钮」 +- [x] 优先级只用 P0/P1/P2 加一句判据,零数字 +- [x] 「不做」清单逐条对照①段已拍板项,**给出对照条目数(8 对 13),差异行 0** +- [x] 六项治理全覆盖,且落在功能条目内(§七 给了落点清单) +- [x] 依赖假设的条目逐条标出(§六 9 条),每条带假设状态标注与「不成立会怎样」 +- [x] 待确认项逐条带齐 复核人 / 复核时机 / 结论落点 +- [x] §九 单列了三条「部分采纳」的处置与理由,没有把它们混进正文当结论 +- [x] 功能归属页里不再有 P8:F12 → P7,F13 的查记录那侧 → P7(产生侧仍 P5);对象字典的消费栏同步 +- [x] 每页每个板块承担哪条功能写清,并与 `2b` 的板块清单双向对得上(可机检 `FN_HOME`/`FN_MAP`) +- [x] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现) +- [x] 未重开需求(grill 在①段)、未写页面结构(那是 `2b`)、未新增本段白名单外的文档 +- [x] 只读输入全部是只读使用,没改任何上游文件 + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__72111e.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__72111e.md new file mode 100644 index 0000000..8e979c6 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__72111e.md @@ -0,0 +1,134 @@ +# 产品功能(2a) + +> 项目:`proto-board`|更新:2026-10-07|性质:功能清单 +> 口径依据:`stage-requirements/references/create-prd.md`(功能六字段、优先级判据、不做清单对照)+ `state-machine.md`(六项治理)。 +> 改版说明:2026-10-07 重写 —— 功能按使用场景重新组织、补齐状态迁移表与六项治理落点、修掉上一版把状态流转整段外挂的结构问题。与上一版的实质差别见文末。 + +**这份只管一件事:做哪些功能、哪些明确不做、每条什么优先级。** 页面长什么样是 `2b-界面布局.md` 的事,本份不描述页面结构。需求本身在①段定完了,本份不重开需求。 + +起点三句(给下游快速对齐用,不展开):一个人用的 Web 工作台;链路是建项目 → 开版本 → 贴需求 → 生成 → 看页面;不卖、不协作。 + +## 一、功能清单 + +按使用场景组织(依据 `1e-使用场景.md` 的 S1–S6),⛔ 不按页面组织 —— 一条场景下的功能可能跨好几页,按页面切会把跨页场景切碎。 + +每条功能带六个字段:功能名、来自哪条场景、优先级、状态流转、验收要点、跨哪些页面。优先级判据是一句话,不填数字: + +- **P0**:不做,这条场景整条办不成。 +- **P1**:不做,场景能办成但要多绕(本该一次点击,变成三步)。 +- **P2**:不做不影响办成,只是更好用。 + +### S1 启动一个新项目 → 3 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F1 新建项目 | P0 | 无状态 | 输入项目名并确认后,列表首行出现该项目 | 项目列表 | +| F2 进入项目 | P0 | 无状态 | 点项目行,进到该项目的版本列表 | 项目列表 → 版本列表 | +| F3 空态引导新建 | P1 | 无状态 | 一个项目都没有时,列表区显示「一句话 + 新建主操作」,不出现空表格 | 项目列表 | + +### S2 在同一个项目里试新方向 → 3 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F4 新建版本 | P0 | 无状态 | 在项目内输入版本名后,版本列表出现该版本,初始为 `draft` | 版本列表 | +| F5 进入版本工作台 | P0 | 无状态 | 点版本行,进到该版本的工作台,左右两栏按当前状态显示 | 版本列表 → 版本工作台 | +| F6 重新生成 | P2 | `done` → `running` | 已生成过的版本可重跑,结果覆盖同一版本文件,版本数不变 | 版本工作台 | + +### S3 拿到一份能打开的页面 → 2 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F7 输入或上传需求 | P0 | 无状态 | 文本框可直接输入;选中 `.md` / `.txt` 后内容进文本框;其他后缀不读 | 版本工作台 | +| F8 生成产品交互页面 | P0 | `draft` → `running` → `done` | 点生成后能逐步看到进行到哪一步;结束后产出单个 HTML 存 `designs/<项目>/<版本>.html` 并可预览 | 版本工作台 | + +### S4 生成失败之后 → 1 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F9 失败原因与重试 | P1 | `failed` → `running` | 失败时显示卡在哪一步;一键重试从原处重跑,停在同一个版本里,不新建版本 | 版本工作台 | + +### S5 回头对照旧版 → 1 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F10 回看已生成页面 | P1 | 无状态 | 已生成过的版本,点进去能在产物区看到当时那份页面 | 版本工作台 | + +### S6 别在没写需求时误点生成 → 1 条功能 + +| 功能名 | 优先级 | 状态流转 | 验收要点 | 跨哪些页面 | +|---|---|---|---|---| +| F11 防误生成与防重复 | P0 | 无状态 | 需求为空时生成不可用;`running` 期间生成不可用 | 版本工作台 | + +**合计 11 条功能,全部能追回 S1–S6,追不回的有 0 条。** + +## 二、状态迁移表 + +状态空间集中在生成这一条链上(F8 / F9 / F6 共用),其余功能无状态。状态名用英文小写下划线,便于③段直接落到代码。 + +| 状态 | 含义 | 允许事件 | 守卫条件 | 迁移到 | 副作用 | +|---|---|---|---|---|---| +| `draft` | 版本已建,没生成过 | `generate` | 需求非空 | `running` | 记下本次需求快照;清掉上一次的失败原因 | +| `running` | 生成中 | `done` / `fail` / `timeout` | — | `done` / `failed` / `failed` | 产物区逐步写步骤日志;生成入口锁住 | +| `failed` | 上次生成失败 | `retry` | 需求仍在 | `running` | 记下失败原因;需求原文保留不动 | +| `done` | 已有可用产物 | `regenerate` | 需求非空 | `running` | 覆盖同一版本文件;版本数不变 | + +不在某一行里的事件一律视为非法,显式拒绝,不静默忽略。四个状态都有出口,`done` 也不是终点(能再 `regenerate`)。没有「其他」「未知」这类兜底状态,也没有无触发事件的自动漂移 —— 唯一的时间驱动是 `timeout`,它已在上表显式登记。 + +## 三、六项治理(逐条落点) + +**失败恢复**:每个失败态只给一条路 —— 手动重试(F9)。不做自动重试:重试会再调一次技能,连环失败时自动重试会把一次故障放大成多次等待。入口就是失败态下的重试按钮。 + +**持久化**:项目、版本、需求文本、产物路径全部存浏览器本地(依据 1a B8 · 【已按假设落地】)。刷新页面、关掉再开都不丢。**清掉浏览器存储就等于清库,这一条必须让用户知道**(回退口径:要跨设备时再加账号与云端存储,前端骨架不用改)。 + +**并发冲突**:单人使用,不存在两个入口同时改同一条数据(依据 1a B6)。唯一要防的是自己盖自己 —— `running` 期间生成入口锁住(F11),守卫条件在状态迁移表里。 + +**幂等**:同一版本重复触发生成,结果落到同一个文件,不产生第二份产物(F6 覆盖口径)。`running` 期间的重复点击被守卫拦下,不会真的跑两次。 + +**超时迁移**:`running` 超过阈值归入 `failed`,并带上「超时」作为原因(F9 展示)。⚠️ **阈值是多少,本版定不了** —— 原型期生成是模拟的,等真技能接进来才谈得上定阈值。这是【假设】,已登记在 §五,接入真实技能前必须先问。 + +**不可逆二次确认**:本版没有删除、发布、扣费类操作(删除不在范围,1a A6),这一项**不适用**。唯一一处不可逆是「重新生成覆盖同版本已生成的产物」——成品被覆盖后拿不回来。原型期不加二次确认,理由是需求原文还留着,重跑就能再得一份。这一条按【假设】处理,登记在 §五。 + +## 四、「不做 / 移出」逐条对照 + +规矩是:涉及已拍板项的,不得自行裁剪,必须列差异。本清单与 `1a-需求文档.md` 的 **15 项用户拍板条目**逐条对过,**差异 0 条**。另外与 1a 的 **7 项【假设】**逐条对过,落在 2a 的有 4 项(重试幂等 / 覆盖口径 / 持久化 / 生成实现),已在对应条目里带上状态标注。 + +对照明细: + +1. **进度看板 / 待办 / 动态流 / 评审流** —— 与 1a A6 一致,不进入功能清单。 +2. **多角色 / 账号体系 / 云端同步** —— 与 1a A3 / B6 / B8 一致,不进入。 +3. **删除版本或项目** —— 1a A6 未列此项,本份也不加;如需删,要回①段补决策,不在②段自行加。 +4. **在生成结果上继续编辑** —— 1a B5 定了产物是单文件成果物,故不做编辑器。 + +## 五、假设台账 + +从①段带进来的每条【假设】,在本份逐条给结论。只允许三种归宿:已确认 / 待实现且已排定确认时机 / 已按假设落地。 + +| 假设 | 本份的结论 | 归宿 | +|---|---|---| +| A10 技能接口暂缺、原型期用模拟生成 | F8 的生成实现按模拟写,接入点留出 | ③ 已按假设落地(影响面:生成结果是占位产物。回退口径:只换 F8 的实现,其余不动) | +| A12 不依赖后端 | 持久化那一条按本地存储写 | ③ 已按假设落地 | +| B8 数据存浏览器本地 | §三 持久化照此写,并把「清存储即清库」显式写出 | ③ 已按假设落地 | +| B9 生成过程可视 + 占位产物 | F8 的验收要点含「逐步看到进行到哪一步」 | ③ 已按假设落地 | +| B10 空态用引导替代空表格 | F3 照此写 | ③ 已按假设落地 | +| **超时阈值**(本份新增) | 状态迁移表里 `timeout` 已登记,阈值留空待定 | ② 待实现且已排定确认时机(**真技能接入前必须问**,结论落 `2a-产品功能.md` §二) | +| **重新生成不做二次确认**(本份新增) | 按「需求原文还在、重跑即可」处理 | ② 待实现且已排定确认时机(**③段做交互前必须问**,结论落 `2a-产品功能.md` §三) | + +## 六、这一版跟上一版的实质差别 + +上一版是 2026-10-07 01:47 的稿子:一张 10 行的功能大表(功能 / 来自场景 / 优先级 / 状态流转 / 验收要点 / 跨页)+一段状态流转 +一段六项治理 +一段不做对照 +一段假设标注。这一版: + +1. **功能清单从一张大表拆成六张,按使用场景分组**。上一版是「一张表按 F 编号排下来」,虽然带了「来自场景」列,但组织方式仍是按编号;现在每条场景一个小节,跨页场景不再被 F 编号切碎。 +2. **补了 F3 空态引导新建**。1a B10 拍了「空态用引导替代空表格」,但上一版的功能清单里**根本没有对应功能** —— 一条已拍板的形态决策没有落点。 +3. **功能从 10 条变 11 条**(新增 F3;原 F3–F10 顺延为 F4–F11)。 +4. **状态流转从中文改成英文小写下划线**(`draft` / `running` / `failed` / `done`),并按方法论的状态迁移表补齐了 6 列:状态 / 含义 / 允许事件 / 守卫条件 / 迁移到 / 副作用。上一版只有两句文字描述(「正常:草稿 → 生成中 → 已生成」),没有守卫条件,也没有副作用。 +5. **状态从「每个功能自带」改成「集中在迁移表」**。上一版把「状态流转」写进每一行,`F7 防误生成` 那行的状态流转写的是「无状态」,但它的守卫条件其实是生成态的守卫 —— 分散写导致这条被记错位置。现在守卫条件统一在迁移表里,功能表只指向它。 +6. **六项治理每条给了具体落点与理由**。上一版 6 条各一句话,其中「超时迁移」写的是「生成超过阈值归入失败态」而没写阈值从哪来;本版明确标出阈值待定并登记为待确认项。 +7. **「不做」对照给出对照条目数与明细 4 条**。上一版只写「对照 10 项,差异 0」,没有列出对的是哪些项;本版写出对照的条目数(15 项拍板 + 7 项假设)与 4 条明细,并把「删除」「编辑产物」两条新增的不做项标明出处。 +8. **假设台账从 1 行扩到 7 行**,补上超时阈值与二次确认两条本份新增的假设,且都带确认时机与结论落点。上一版只有 F6 一条。 +9. **拿掉了「六项治理整合进功能条目」这句自我说明**。上一版标题写「六项治理(状态机整合进功能条目)」,但实际是独立成段、没整合进去 —— 说法和做法对不上,本版改成如实的一节。 + +## 七、说人话评分 + +已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。 + +扣分处:六张功能表体例相同,读起来是一串整齐的短句;§四对照那一段为了说清「对过哪些项」写得比别处密。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__d85687.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__d85687.md new file mode 100644 index 0000000..4ff721a --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__d85687.md @@ -0,0 +1,280 @@ +# 2a 产品功能 + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 1 子步,产出 `prd/2a-产品功能.md` +> 判据源:`stage-requirements/references/create-prd.md`(功能清单)+ `references/state-machine.md`(六项治理,落点在功能条目内) +> 本份只做一件事:把①段《使用场景》(`research/1e-使用场景.md`)细化成功能清单 —— 做哪些、不做哪些、每条什么优先级。 +> 页面骨架在 `prd/2b-界面布局.md`,⛔ 本份不描述页面长什么样,只写「跨哪些页面」。 + +--- + +## 〇、上游状态(先看这一节再往下读) + +| 上游 | 状态 | 说明 | +|---|---|---| +| ①段 1a 需求文档 | ✅ 已就位 | `research/1a-需求文档.md`(23 KB,2026-10-07 22:29)。性质是**汇总型**,不是 grill 澄清产出。 | +| ①段 1b 竞品分析 | ✅ 已就位,**跨项目** | 分析本体在 `执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/`。引用关系见 `research/1b-竞品分析.md`。 | +| 1a 里指向 1b 系列的条目 | ✅ **复核已完成** | 2026-10-07 22:2x 逐条核过:9 条受影响里 **2 条改**(F5 措辞、F7 依据列)、**7 条不改**。清单见 `…-72111e/复核清单-1a受影响条目.md`。 | +| 1a 的 9 条待复核 | 🔴 **仍未复核** | 全部未经用户确认。本份凡依赖它们的条目**逐条标出**(见 §三)。 | +| A1–A4 假设 | 🔴 **仍未经确认** | 同上。 | + +引用 1b 的证据等级随文标注:**源码级**(四家)/**界面级**(只有 Easel)/**文档级**(只有文到 AI,不与另四家同权)。 + +--- + +## 一、功能清单怎么组织 + +**按使用场景组织,不按页面。** 一条场景下可能挂跨多个页面的功能。这是①段《使用场景》与②段之间的接口,也是本段唯一的「功能该不该有」判据 —— 追不回场景的功能,要么补场景、要么砍掉。 + +优先级只给 P0/P1/P2 加一句可复述的判据,⛔ 不填数字(本项目没有任何数据源)。 + +--- + +## 二、功能清单(14 条) + +### S1 找选题 + +#### F1 对标账号监控与爆款异常值识别 + +- **功能名**:盯住几个对标账号,把「数据远高于它平时水平」的内容挑出来。 +- **来自哪条场景**:S1 +- **优先级**:P0 —— 判据:不做则 S1 整条办不成。 +- **状态流转**:`idle → fetching → hit / miss`。事件=刷新、恢复自动更新;守卫=平台授权有效(🔴 **依赖 A2**,见 §三);失败 ⇒ 迁 `failed`。 +- **治理**:失败恢复=退避重试 3 次后转「手工录入对标号」的降级路径;持久化=监控名单与历史异常值落本地(不落全局);并发=同一对标号同时拉取走队列串行,不并发写;幂等=按「对标号 + 内容标识」去重,重复拉取不产生新条目;超时=`fetching` 上限 90 秒(设计值,实现可调),超时转 `failed`;不可逆=不涉及。 +- **验收要点**:录入一个对标号后,能看到它近 3 天的更新;能指出哪几条是异常值(标注了它相对该号平时水平的倍数);刷新失败时有明确提示而不是静默空列表。 +- **跨哪些页面**:P2 选题雷达 + +#### F2 选题库与灵感速记 + +- **功能名**:随手记下一刻想到的东西,把它收进待做清单。 +- **来自哪条场景**:S1、S2 +- **优先级**:P0 —— 判据:不做则选题无处落地,S1 与 S2 都断在最后一步。 +- **状态流转**:`draft → 待做 → 在写 → 已用 / 弃用`。事件=记录、转待做、转在写、标已用、弃用;守卫=转「已用」需已关联到一条内容;弃用可恢复(可逆)。 +- **治理**:失败恢复=本地写入失败时保留输入框内容,不丢字;持久化=落本地知识库目录,刷新与重启后仍在;并发=同一人两个入口同时改 ⇒ 乐观重试(写临时文件 + 原子替换 + 回读核对),⛔ 不用文件锁(本机实测会卡死);幂等=同一条灵感重复提交按内容 hash 去重;超时=无中间态;不可逆=不涉及(删除走可恢复的「弃用」)。 +- **验收要点**:连着记 5 条灵感,重启后 5 条都在;一条灵感能被标记为「已用」并追到它变成了哪条内容。 +- **跨哪些页面**:P1 矩阵总览(随手记入口)、P2 选题雷达 + +#### F3 评论区洞察找选题 + +- **功能名**:从一条内容的评论区里,把反复出现的问题挑成选题。 +- **来自哪条场景**:S1 +- **优先级**:P1 —— 判据:不做仍能从 F1 得选题,只是少一路输入。 +- **状态流转**:`idle → 抓取中 → 已出候选 → 已采纳 / 忽略`。事件=抓取、采纳、忽略;守卫=设定过「最多获取条数」与「样本排序」;🔴 **依赖待复核第 7 条**(数据来源与频率未定)。 +- **治理**:失败恢复=抓取失败转手工粘贴评论;持久化=候选选题落本地;并发=同一内容同时抓取走队列;幂等=按「评论标识」去重;超时=抓取中上限 60 秒(设计值);不可逆=不涉及。 +- **验收要点**:给一条视频,能按「点赞最多」取出前 N 条评论并给出至少一条可采纳的候选选题。 +- **跨哪些页面**:P2 选题雷达 + +### S2 选题进资产库 + +#### F4 爆款拆解与资产库 + +- **功能名**:把一条爆款的写法拆开,存成下次能直接拿的东西。 +- **来自哪条场景**:S2 +- **优先级**:P0 —— 判据:不做则 S2 整条办不成;`1a` §六 F4 注明「这一条决定了『越用越准』」。 +- **状态流转**:`未拆 → 拆解中 → 待入库 → 已入库 / 退回`。事件=发起拆解、入库、退回;守卫=入库前过门禁(见治理);退回后原件保留。 + 🔴 资产库本身有四个分区(角度、结构、开场白、标题),各区条目独立流转,互不阻塞。 +- **治理**:失败恢复=拆解失败保留原文,可重试;持久化=入库结果落本地,带原文与出处链接;并发=同一素材重复拆解按素材 hash 幂等;幂等=同一条目重复入库不产生副本;超时=拆解中上限 180 秒(设计值,长任务),超时转 `待入库` 并保留中间结果;不可逆=**入库前设门禁**(对策 R3):无出处的、原文缺失的一律先设 `draft`,`draft` 可删,`已入库` 删除需二次确认。 +- **验收要点**:拆完一条爆款,四个分区里各能看到至少一条新条目;条目的原文与出处可回溯;拿 20 条真实爆款入库,隔一周回来能找回想要的那条。 +- **跨哪些页面**:P3 资产库 + +### S3 走完创作流水线 + +#### F6 创作流水线 + +- **功能名**:把一条选题从「聊思路」一路做到成稿,文案、标题、封面齐。 +- **来自哪条场景**:S3 +- **优先级**:P0 —— 判据:不做则 S3 整条办不成。 +- **状态流转**:`选题态 → 思路态 → 文案态 → 标题态 → 封面态 → 检查态 → 成稿态`;每一态可回退到上一态。事件=推进、回退;守卫=推进到「检查态」前文案与封面必须都有(封面缺 ⇒ 提示但不硬阻);成稿态可再编辑(回 `文案态`)。 +- **治理**:失败恢复=任一步 AI 调用失败保留已产出内容,可重试该步;持久化=每一步的产物落本地并按内容 id 归档;并发=同一条内容两个窗口同时改 ⇒ 写临时文件 + 原子替换 + 回读核对,检测到覆盖则提示;幂等=重复点「起标题」生成新版本而不覆盖(接 F8);超时=任一步上限 180 秒(设计值),超时保留中间结果;不可逆=不涉及(这一步没有对外动作)。 +- **验收要点**:一条选题能一路走到成稿,中途不必离开这一处;每一步的产物都存得住;用户全程不需要自己选技能。 +- **跨哪些页面**:P4 创作台 + +#### F8 内容与素材的版本管理 + +- **功能名**:改稿产生新版本,旧版本还在。 +- **来自哪条场景**:S3、S4 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠手工另存,容易盖掉)。 +- **状态流转**:`v1 → v2 → … → 当前版`;每个版本可标「当前」。事件=编辑保存、切换当前版;守卫=切换当前版不影响已发布记录指向的版本;终态可再次编辑(回出新版本)。 +- **治理**:失败恢复=保存失败保留编辑中内容;持久化=全部版本落本地,不覆盖;并发=同一条内容两处同时保存 ⇒ 后保存的产生新版本,同时提示「上游已变」(对应 1b 里 `stale` 的做法);幂等=同样内容重复保存不产生新版本;超时=无中间态;不可逆=**删除某个版本需二次确认**。 +- **验收要点**:改一版再改一版,两版都在;已发布的那条记录仍指向它当时用的版本;能看出某一版是基于哪一版改的。 +- **跨哪些页面**:P4 创作台、P5 发布中心 + +#### F14 录制卡片与画板 + +- **功能名**:把成稿变成一张对着讲的知识卡片。 +- **来自哪条场景**:S3 +- **优先级**:P2 —— 判据:不做不影响 S3 办成,只是更好用。 +- **状态流转**:`无 → 已生成 → 已同步`。事件=生成、同步到画板;守卫=成稿态才可生成。 +- **治理**:失败恢复=生成失败可重试;持久化=卡片与画板落本地;并发=同一内容重复生成按内容版本幂等;幂等=同版本不重复生成;超时=上限 60 秒(设计值);不可逆=不涉及。 +- **验收要点**:一条成稿能生成卡片;卡片能落到画板里被打开。 +- **跨哪些页面**:P4 创作台 + +### S4 一份母版变多份 + +#### F7 一份母版到多账号多平台版本 + +- **功能名**:母版改一次,按各账号各平台的口径各出一版。 +- **来自哪条场景**:S4 +- **优先级**:P0 —— 判据:不做则 S4 整条办不成。 +- **状态流转**:`母版 → 已展开(多版本)→ 逐版确认 → 就绪`。事件=展开、逐版编辑、确认;守卫=每个版本必须绑一个账号 + 一个平台(沿用 F9 的画像口径);未确认的版本不许进发布闸门。 + 🔴 依据界线(照 1a 复核后的写法):Easel 发布中心**直证的是「多平台」**(一处编辑、八端预览,源码级 + 界面级);**「多账号」的依据是 Easel 的多画像支持加本产品的矩阵需求**,发布中心没看到逐账号变体。 +- **治理**:失败恢复=展开中断保留已生成的版本;持久化=每个版本独立落本地;并发=两处同时展开按「母版版本 + 目标账号」幂等;幂等=同母版同账号同平台不重复展开;超时=展开上限 120 秒(设计值);不可逆=不涉及(确认可撤回,未发布的版本可删,删除需二次确认)。 +- **验收要点**:母版改一次,各账号各平台的版本跟着更新;超限的地方当场标出来;改漏了某个账号能被发现。 +- **跨哪些页面**:P4 创作台(从成稿发起)、P5 发布中心 + +### S5 发之前先过闸 + +#### F5 发布前分级闸门 + +- **功能名**:发之前,硬的拦住、软的只提醒。 +- **来自哪条场景**:S5 +- **优先级**:P0 —— 判据:不做则 S5 整条办不成。 +- **界线(照 1a 复核后的写法,⛔ 不是旧版措辞)**:硬闸管**敏感信息**(账号密钥、内部路径这类),不过就不许发;软闸管**人设一致性**(低于阈值只告警,不阻断)。⚠️ 竞品里**没有「敏感词检测」,也没有「事实检测」**——照旧版写会把功能带偏成一个竞品池里没人做过的「事实核查器」。 +- **状态流转**:`未检 → 检查中 → 通过 / 有硬拦 / 有软劝`。事件=发起检查、改完复检;守卫=有硬拦项时「去发布」不可用;软劝不阻断但要在发布确认页可见。硬拦项改完才能过。 +- **治理**:失败恢复=检查本身失败按**不过**处理(fail-closed,宁拦不放);持久化=每次检查结果留痕,随发布记录一起存;并发=同一内容重复检查以最后一次为准;幂等=同一版本重复检查结果一致;超时=检查上限 60 秒(设计值),超时按不过处理;不可逆=**「去发布」这一步必须人确认**(read-first / draft-first)。 +- **验收要点**:一份带敏感信息的稿子会被拦住且说得出是哪一处;一份人设偏移的稿子只提醒、不拦;改完能复检并通过。 +- **跨哪些页面**:P5 发布中心 + +#### F13 发布留痕与人工确认记录 + +- **功能名**:谁在什么时候确认发的、发的是哪一版,查得到。 +- **来自哪条场景**:S5 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠聊天记录回溯,且回溯成本高)。 +- **状态流转**:`草稿 → 待审 → 已确认 → 已发布 → 已归档`。事件=送审、确认、登记发布、归档;守卫=`已发布` 需要先有「已确认」记录;**组织级急停**可把任意 `待审` 打回 `草稿`。 +- **治理**:失败恢复=登记失败保留草稿状态;持久化=审计轨迹落本地,只追加不改写;并发=同一内容两处送审按「内容版本」幂等;幂等=重复确认同一版本不产生第二条记录;超时=`待审` 上限 72 小时(设计值),超时提醒发起人,不自动放行;不可逆=**发布、删帖、组织级急停三件事形态不一样,别压成一句**:发布是人的动作;删帖带破坏性标注,需二次确认;急停的触发与恢复都只有人能做。 +- **验收要点**:每条发布都能查到确认人与时间;能看出这条发的是哪一版;急停能拦住所有待审项,恢复后之前的草稿还在。 +- **跨哪些页面**:P5 发布中心、P8 记录与对账 + +### S6 效果回写 + +#### F9 多账号画像与记忆 + +- **功能名**:每个账号有自己的口径和记忆,互不覆盖。 +- **来自哪条场景**:S6、S7 +- **优先级**:P0 —— 判据:不做则 S6 整条办不成(表现无处可回)。 +- **状态流转**:`空 → 已建 → 使用中 →(复盘回写)→ 使用中`。事件=建画像、编辑、被复盘回写;守卫=一个账号一份画像,账号标识唯一;回写只追加记忆条目,不改历史结论。 +- **治理**:失败恢复=保存失败保留编辑内容;持久化=**记忆作用域收敛到画像目录,⛔ 不写全局文件**(对策 R4:多账号并发写全局会互相覆盖);并发=多账号并行读同一份画像,写只写自己那一份;幂等=同一条记忆重复回写按内容 id 去重;超时=无中间态;不可逆=删除画像需二次确认(会连带删它累积的记忆)。 +- **验收要点**:两个账号各自的画像互不影响;一条内容复盘后,对应账号的画像里多出一条记忆;并排跑两个账号的创作,谁都不覆盖谁。 +- **跨哪些页面**:P6 账号画像 + +#### F10 效果复盘与归因回写 + +- **功能名**:一条内容跑完,把它的表现读回来,写成这个账号的经验。 +- **来自哪条场景**:S6 +- **优先级**:P0 —— 判据:不做则 S6 办不成,整个闭环断在最后一步。 +- **状态流转**:`待复盘 → 读数据中 → 已归因 → 已回写`。事件=发起复盘、确认归因、回写;守卫=先有发布记录(F13);回写前必须人确认归因结论。 + 🔴 本组**只有 Easel** 做成了这个闭环(源码级),⛔ 不写成「多家都做了」。 +- **治理**:失败恢复=数据读不到时降级为手工录入表现;持久化=复盘结论与回写记录落本地;并发=同一条内容重复复盘按内容 id 幂等;幂等=同一次复盘重复回写不重复追加记忆;超时=读数据上限 90 秒(设计值),超时转手工录入;不可逆=**回写会改画像记忆,需人确认**(不自动写)。 +- **验收要点**:一条已发布内容能复盘出结论;结论能回写到对应账号的画像;回写后下一轮做这个账号时能看到这条经验。 +- **跨哪些页面**:P7 复盘台 + +### S7 看整个矩阵 + +#### F11 矩阵级看板 + +- **功能名**:一屏回答每个账号今天该发什么、发了什么、效果如何。 +- **来自哪条场景**:S7(🔴 **整条标【假设】**,待复核第 5 条) +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(逐账号点进去看);⚠️ 若第 5 条复核为「不需要矩阵级视图」,本条可整体砍掉。 +- **状态流转**:无状态(只读视图,见 `2b-界面布局.md` 的信息分档)。事件=进入、切换账号、下钻。 +- **治理**:失败恢复=数据源不可用时显示「数据未更新」并给出时间戳,⛔ 不显示空白冒充正常;持久化=视图本身不落库,只读上游;并发=只读,无冲突;幂等=只读;超时=无;不可逆=不涉及。 +- **验收要点**:一屏能看到矩阵下每个账号的今日状态与效果;数据不新鲜时看得出来。 +- **跨哪些页面**:P1 矩阵总览 + +### S8 商单与内容对账 + +#### F12 商单与收支记录、内容对账 + +- **功能名**:一条内容带了商单,内容、发布记录和收支对得上。 +- **来自哪条场景**:S8(🔴 **整条标【假设】**,待复核第 6 条;另依赖 **A3**) +- **优先级**:P2 —— 判据:不做不影响场景办成,只是更好用;⚠️ 若第 6 条复核为「不进第一版」,本条移出第一版(属待确认项,见 §五)。 +- **状态流转**:`未登记 → 已登记 → 待结算 → 已结算`。事件=登记、核对、标结算;守卫=`已结算` 需内容与发布记录都已关联;可反结算(可逆)。 +- **治理**:失败恢复=登记失败保留输入;持久化=收支记录落本地;并发=同一条记录两处改按记录 id 幂等;幂等=同一内容同一口径不重复登记;超时=无中间态;不可逆=标「已结算」后修改需二次确认。 +- **验收要点**:一条带商单的内容能查到它的发布记录与收支;对账时不需要翻聊天记录。 +- **跨哪些页面**:P8 记录与对账 + +--- + +## 三、依赖假设的条目(逐条标出) + +⭐ 1a 的 9 条待复核与 A1–A4 **全部未经用户确认,⛔ 不当事实用**。本份凡依赖它们的条目列在下面,写清「依赖哪条、不成立会怎样」。依据假设的判断,条目里已带上假设状态标注。 + +| 功能 | 依赖 | 假设内容 | 不成立会怎样 | +|---|---|---|---| +| F1 | **A2** + 待复核第 2 条 | 平台数据靠官方接口或授权方式拿 | 自动拉取这条路断,退化成手工录入对标号;S1 的「不用刷榜」打折 | +| F10 | **A2** + 待复核第 2 条 | 同上 | 效果数据读不回来,归因只能靠手工录表现,S6 降级 | +| F11 | **A1** + 待复核第 5 条 | 账号数 10–50;矩阵级视图确实需要 | 账号数超出 ⇒ 看板的组织方式要重设计;视图不需要 ⇒ F11 可整体砍掉,P1 页重画 | +| F9 | **A1** | 账号数 10–50 | 同 F11;且画像数量与存储组织要跟着变 | +| F12 | **A3** + 待复核第 3、6 条 | 收支口径是「内容级」;商单对账进不进第一版 | 口径若是月级 ⇒ 本条整条重做;不进第一版 ⇒ 移出第一版 | +| F5 | **A4** + 待复核第 4 条 | 团队 5–20 人、审批不超过三层 | 审批层数超三层 ⇒ 闸门与审批模型要重做 | +| F13 | **A4** + 待复核第 4 条 | 同上 | 同上 | +| F3 | 待复核第 7 条 | 评论洞察的数据来源与频率未定 | 数据来源定不下来 ⇒ F3 退成手工粘贴评论 | +| (无功能) | 待复核第 8 条 | 「整合营销」含不含投放 | 若含投放 ⇒ 需要新增一条场景(1e §六),本份没有对应功能,⛔ 不编 | +| (策略层) | 待复核第 9 条 | 只服务一个机构自用 vs 可交付产品 | 影响 `1d-产品策略.md` §7、§9 与权限体系是否进第一版,不影响本份功能骨架 | + +**假设三归宿**(方法论要求,⛔ 不许长期悬空):上表 9 条**全部**落在「② 待实现且已排定确认时机」这一档 —— 确认时机统一为「②段收口时由主会话转用户一次性过;未过之前,③段不得把这些条目当硬约束用」。另两条落「① 已确认」的:**无**(1a 的 6 项已确认项都是无假设依赖的骨架条款)。落「③ 已按假设落地」的:**无**。 + +--- + +## 四、六项治理覆盖核对 + +判据源 `state-machine.md` 的必答清单。⛔ 不留空,不适用写「不适用」。 + +| 治理项 | 落点(哪些功能显式写了) | 最要紧的一条 | +|---|---|---| +| 失败恢复路径 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F11 F12 F13 F14 | F5 走 **fail-closed**(检查失败按不过处理),本组唯一一条「宁拦不放」 | +| 持久化范围 | 全部 14 条 | F9 的**记忆作用域收敛到画像目录、不写全局**(对策 R4);F13 的审计轨迹**只追加不改写** | +| 并发冲突 | F1 F2 F3 F6 F7 F8 F9 F12 | 统一做法:写临时文件 + 原子替换 + 回读核对,⛔ 不用文件锁(本机实测会卡死) | +| 幂等 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F12 F14 | F4 与 F8 的**重复入库/重复保存不产生副本、也不覆盖旧版** | +| 超时迁移目标 | F1 F3 F4 F5 F6 F7 F10 F13 F14 | F13 的 `待审` 超时**只提醒、不自动放行** —— 不可逆动作不许靠超时自动过 | +| 不可逆操作二次确认 | F4 F5 F8 F9 F10 F12 F13 | F5 + F13:**发布、删帖、组织级急停三件形态不同**,分别按「人的动作 / 二次确认 / 只有人能触发与恢复」处理 | + +补一条方法论要求的分工说明:**发布这个动作本身留在人手里**(read-first / draft-first,源码级);**删帖**带破坏性标注、属需二次确认的一类;**组织级急停**的触发与恢复都只有人能做。⚠️ 三件事的「人来做」形态不一样,⛔ 不压成一句话。 + +--- + +## 五、「不做」清单与①段已拍板项的逐条对照 + +**对照方法**:本份列出的「不做 / 移出 / 暂缓」共 **8 条**,逐条对 `1a-需求文档.md` 的已拍板项 **13 条**(来源:§一 不做什么 4 条 + §八 第一版不做 5 条 + §八 三个入口 1 条 + §三 三条差位的取舍结论 1 条 + §六 治理段「人来做」的三件事分开记 3 条 —— 去重后按条计)。 + +| # | 本份的「不做 / 移出 / 暂缓」 | 1a 原条目与口径 | 拟改口径 | 理由 | 差异 | +|---|---|---|---|---|---| +| 1 | 不做平台自动化代发 | §一 不做什么;§八 第一版不做 | 不变 | 走 F5 + F13 的人确认路径 | 无 | +| 2 | 不做矩阵级自动投放优化 | §八 第一版不做 | 不变 | 1b 里五家都没这一段证据 | 无 | +| 3 | 不做跨机构协作与权限体系 | §八 第一版不做 | 不变 | A4 假设团队不超过三层审批 | 无 | +| 4 | 不做移动端 App | §八 第一版不做 | 不变 | — | 无 | +| 5 | 不把平台数据抓回来做数仓 | §八 第一版不做 | 不变 | 只对接与留痕 | 无 | +| 6 | 不自建投放系统 | §一 不做什么 | 不变 | 只对接与留痕 | 无 | +| 7 | 不做个人版单账号工具 | §一 不做什么 | 不变 | 面向一个账号矩阵 | 无 | +| 8 | 第一版不铺「三个入口」之外的界面 | §八「这一版只留的三个入口」 | 不变 | 找选题 / 走创作流水线 / 看矩阵复盘 | 无 | + +**结论**:**8 条对照完,差异行 0**。没有一条涉及已拍板项的口径改动,因此没有「与已定决策的差异」表要交用户确认。 + +**一条待确认项**(不是「不做」,是「暂缓」,必须带回收三字段): +本份把 **F12** 标为 P2 并注明「若待复核第 6 条为『不进第一版』则移出第一版」。这是一条**暂缓**。 +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过 +- 结论落点 = 本文件 §二 F12 条目与 §三 依赖表 + +--- + +## 六、页面清单(跨页引用用的 ID) + +本份只写「跨哪些页面」,页面骨架在 `2b-界面布局.md`。为免引用悬空,先把页 ID 列出来(骨架细节见那份): + +P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台|P8 记录与对账 + +--- + +## 附:本份自检 + +- [x] 每条功能都追回①段《使用场景》的某一条(14 条全覆盖,§四 反向核过) +- [x] 每条功能六字段齐全(功能名 / 来自哪条场景 / 优先级 / 状态流转 / 验收要点 / 跨哪些页面) +- [x] 优先级只用 P0/P1/P2 加一句判据,零数字 +- [x] 「不做」清单逐条对照①段已拍板项,**给出对照条目数(8 对 13),差异行 0** +- [x] 六项治理全覆盖,且落在功能条目内(§四 给了落点清单) +- [x] 依赖假设的条目逐条标出(§三 9 条),每条带假设状态标注与「不成立会怎样」 +- [x] 唯一一条暂缓项(F12)带齐复核人 / 复核时机 / 结论落点 +- [x] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效) +- [x] 未重开需求(grill 在①段)、未写页面结构(那是 2b)、未新增本段白名单外的文档 +- [x] 上游状态写在文首,凡引用 1b 处标了证据等级 + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__旧归档prd-V4-20261010.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__旧归档prd-V4-20261010.md new file mode 100644 index 0000000..44453bd --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2a-产品功能__旧归档prd-V4-20261010.md @@ -0,0 +1,563 @@ +# 2a 产品功能(新版 V4) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 1 子步,产出 `prd/2a-产品功能.md` +> 本版在 V3 基础上**把用户 2026-10-09~10 陆续下达的八条口径落进正文**(归属判据换「一类事情放同一页」、资产入库不限页、选题库按分类容纳、记录与对账属复盘不拆、一条内容对应多个发布渠道、账号分内容账号与平台账号两个概念、投放页目标选择两级、F7 展开单位改平台账号 + F13 补「一版一路」)。V3 本身是在 V2 基础上按用户口径同步功能归属(导航一层七项、P8 并入复盘、功能与板块一一对应);V2 是**重做**,不是润色;上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)。 +> V4 的两份依据(口径原文):`用户口径裁决-5条回应.md`(2026-10-09)、`用户口径追加-账号是两个概念.md`(2026-10-10)。 +> 只读输入:①段 `1a-需求文档.md`(`docs/pm/mcn-shortvideo-agent/research/`)、`1e-使用场景.md`(八条用户故事)、②棒 GPT 意见与采纳决策、第①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、V2 版 `2a-产品功能-新版.md`/`2b-界面布局-新版.md`。 +> 判据源:`stage-requirements/references/create-prd.md`(功能清单)+ `references/state-machine.md`(六项治理,落在功能条目内)。 +> 本份只回答「做哪些功能、不做哪些、每条什么优先级、功能归谁」。页面骨架在 `2b-界面布局-新版.md`。 +> ⛔ 全文零视觉词 —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。 +> 🔴 **本版没加功能、没改优先级**:功能清单仍是 14 条(F1–F14),编号一个没动。改的是**判据、对象定义与三条功能的措辞**。 + +--- + +## 〇、一屏结论 + +**V4 最要紧的一句**:**功能没加没减,改的是判据、对象定义与三处措辞。** 八条口径逐条落到 §一/§二/§三,页面侧同步落到 `2b` 与原型。 + +**沿用上一版(V3)的结论**(本版没推翻): + +- 功能清单还是 14 条(F1–F14),**编号一个没动**(沿用 `1a` §六,`1e` §四 反向核过)。 +- 核心业务对象字典是 11 个对象 —— 本版**仍是 11**(账号只拆概念不拆对象,见 §二)。 +- 两条功能口径写实:F11 标「待验证/非主链能力」;F12 标 `P2/Deferred`。 +- 三条更结构化的建议(②段要不要并成一份九节的架构基线、六种流转类型要不要进正文、两条新增流转)**没有在做/不做上自作主张** —— 先按 GPT 的方向落地,同时在 §九 单列交回用户。 + +**V4 本轮追加(2026-10-10,用户八条口径)**: + +- **功能归属的判据换成「一类事情放同一个页面」**(§一 第 2 条重写)。拿它复核七页:**页集合不动**,七页各自都是「一类事」。 +- **资产入库不限页**:`Asset` 的「产生位置」由 P3 改成「**P2/P3/P4 均可**」,并写清「一个对象只有一处产生」管的是**唯一权威数据**,⛔ 不是**写入动作的地点**(§二 对象字典 + §一 第 3 条后新增一句 + §三 F4)。 +- **选题库容纳「对选题有帮助的任何信息」,靠分类区分**:随手记仍落选题库,⛔ 不新增「待整理」状态、⛔ 不做多去向(§三 F2)。分类维度由本版给出方案(**进度 × 类型**两个正交维度),落到 `2b` §五 P2。 +- **记录与对账属复盘**:这一类事就是「发布之后看数据与看收入」,⛔ 不拆页、⛔ 不分区(§三 F12/F13 与 `2b` §五 P7)。 +- **一条内容对应多个发布渠道**:`PublishTask` 的定义由「含目标账号与平台」改成「含**发布渠道**」(渠道 = 平台账号)(§二 对象字典)。 +- **账号分两个概念**:`Account` 改写成**内容账号**(管内容属性:账号设定),**平台不属于它**;**平台账号 = 发布渠道**(带平台 + 登录态 + 授权状态),做成内容账号下的**子项清单**,**不加对象**(仍是 11 个)(§二 对象字典 + §三 F9)。 +- **F7 的展开单位改成平台账号**(一个内容账号下的每个平台账号各一版,守卫同步改「内容账号 + 它的一个平台账号」);**F13 补「一版一路」**(一个渠道只对应一个版本 ⇒ 发布记录的渠道由版本唯一确定,`PublishRecord` **不加渠道字段**)(§三 F7/F13)。 +- **定时发布挂起**:用户 2026-10-10 07:56 逐字「后续具体做投放功能的时候在说」⇒ 本版**不为它加任何功能条目与字段**,只登记在 §九(§九 第 7 项)。 + +**V3 追加(2026-10-09 用户令)**: + +- **P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8;F12、F13 的归属页随之由 P8 改 **P7**(§三 F12/F13、§四 总表、§二 对象字典)。 +- **导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。 +- **功能与板块的对应写成可机检关系**(原型 `FN_HOME`/`FN_MAP`,自检双向核),判据仍是「这个功能主要创建或改变哪个核心业务对象」。功能清单仍是 14 条,编号一个没动。 + +--- + +## 一、这份文档怎么组织(四条判据,全篇照这个来) + +**第 1 条 · 功能按使用场景组织,不按页面。** +沿用 2026-10-06 的用户定案。一条场景下可以挂跨好几个页面的功能。理由不是习惯:按页面组织会把跨页场景切碎,也跟①段《使用场景》对不上。 + +**第 2 条 · 归属看「这是哪一类事」,同类事放同一页。**(🔴 2026-10-09 用户口径换的判据,取代上一版「只看核心业务对象」) +判据一句话:**这个功能干的是哪一类事情,就和做同一类事情的其它功能放在同一页。** +用户原话:「应该是一类事情在一个页面 比如 找选题和做选题就应该在一起 都是选题相关的事情」。 + +拿它复核七页,**页集合一个没动**: + +| 页 | 这一页收的是哪一类事 | 复核结果 | +|---|---|---| +| P1 矩阵总览 | 今天先处理哪件 —— 跨账号的待办与概览 | 一类(一名内容负责人一眼扫全局) | +| P2 选题雷达 | 找选题、拆解选题、把选题推进下一步 —— **选题相关的事** | 一类(找与做同页,正是用户举的例子) | +| P3 资产库 | 资产条目的统一管理(分类分区/检索/维护/引用) | 一类(管资产) | +| P4 创作台 | 一条内容从选题走到成稿,再展开成多平台账号版本 | 一类(做内容) | +| P5 发布中心 | 这批内容怎么发出去:过闸、逐版确认、留痕 | 一类(发出去) | +| P6 账号画像 | 内容账号的设定与它的平台账号(发布渠道) | 一类(管账号) | +| P7 复盘台 | **发布之后看数据与看收入** —— 复盘、发布记录、溯源、对账、商单收支 | 一类(用户原话:发布的目的就是看数据和看收入) | + +⚠️ **判据落地时仍要看核心业务对象 —— 对象是「同一类事」的落地手段,不是判据本身。** +理由:一类事往往就是围着同一个对象转(选题相关的事产 `Topic`、发布相关的事产 `PublishTask`/`PublishRecord`、账号相关的事产 `Account`)。先按「哪一类事」分页,再用「它主要创建或改变哪个对象」逐条钉住归属页,两句话说的是同一件事;**分页时以「哪一类事」为准** —— 用户看得见的是事,看不见的是对象。 +拿对象那一层再核一遍,本版**没有因为换判据而挪页**:F7 仍归 P4、F14 仍归 P4、F5 仍归 P5(这三条是 V2 相对 V1 改的,本版沿用)。 + +**第 3 条 · 跨页面只传对象 ID 加必要上下文,不传页面临时状态。** +比如 P1 跳 P7,传的是 `accountId`,不是「刚才点的是哪个账号」这个临时变量。P7 自己拿 `accountId` 去查它的发布记录与表现数据。 +这条治的是现状里两处硬伤(详见 `2b-界面布局-新版.md` §六):P1 → P7 传了参数接收方不读(落错对象),P2 → P4 压根不带内容。 + +**第 4 条 · 「一个对象只有一处」管的是权威数据,⛔ 不管写入动作发生在哪一页。**(🔴 2026-10-10 用户口径新增,专门堵这一处误读) +一个对象**只有一份权威记录**、只有一处能改它的权威值;但**产生它的写入动作可以在别的页发生**。最直接的一例是资产:任何页(P2 的拆解线索、P3 的拆解、P4 的创作沉淀)都可以**就地入库**,落下来的仍是**同一份**资产条目,统一由资产库页管。 +用户原话:「所有页面有产生资产都可以 随时入库,资产库页是统一管理的地方」。 +⚠️ 别把这条读成「归属页有多个」:**归属页按「谁统一管它」定**(资产仍归 P3),别的页只是**入口**。 + +--- + +## 二、核心业务对象字典(11 个) + +产品里真正在流动的东西就是这些。每一行写清三件事:它是什么、在哪儿产生、被谁拿走。 +🔴 **对象数仍是 11** —— V4 把「账号」拆成两个概念,但**只拆概念不拆对象**:`Account` 改写成**内容账号**,**平台账号**做成它下面的**子项清单**(1 → N),因此不进这张表、也不算新对象。理由见本节末。 + +| 对象 | 是什么 | 产生位置 | 被谁消费 | +|---|---|---|---| +| `Account` 内容账号 | 管**内容属性**的主体:账号设定(定位/风格/受众/偏好与红线/长期记忆)。🔴 **平台不属于它** —— 它下面挂 1 → N 个**平台账号**,平台账号是**子项、不是新对象** | P6 | P1、P4、P5、P7 | +| `Benchmark` 对标号 | 被盯住的一个对标账号 | P2(F1 录入监控名单) | P2 | +| `Topic` 选题 | 选题库里的一条信息(⛔ 不止「一条待做选题」),含它的来源与**分类**(§三 F2) | P2(F1 异常值、F2 选题库、F3 评论洞察) | P4 | +| `Asset` 资产条目 | 拆解出来的可复用写法,分角度/结构/开场白/标题四区 | 🔴 **P2/P3/P4 均可**(任何页拆出资产都可就地入库;资产库页是**统一管理**的地方,⛔ 不是唯一入库口) | P4 | +| `Content` 内容 | 一条从选题长出来的内容,含它的创作环节位置 | P4(F6) | P5、P7 | +| `ContentVersion` 内容版本 | 一次改稿或一次多平台账号展开产生的一版 | P4(F7、F8) | P5、P7 | +| `PublishTask` 发布任务 | 一次「把这些版本发出去」的任务,含**发布渠道**(渠道 = 平台账号) | P5(过 F5 闸门后) | P7 | +| `PublishRecord` 发布记录 | 谁在什么时候确认发了哪一版 | P5(F13) | P7 | +| `Performance` 表现数据 | 一条内容发出去之后的真实读数 | P7(从平台读回,读不到则手工录入) | P1、P6、P7 | +| `Review` 复盘结论 | 系统归因加人工裁决后写下的那条结论 | P7(F10) | P1、P2、P6 | +| `Campaign/Order` 商单与收支 | 一条内容带的商单与钱的口径 | P7(F12) | P1、P7 | + +**平台账号写在这里说清楚(它是子项,不进上表、不进对象计数)**: + +- **内容账号** = 管**内容属性**的(主要是账号设定:内容做成什么样)。定位、风格、受众、偏好与红线、长期记忆都是内容属性;**平台不是**。 +- **平台账号** = **发布的渠道** —— 三方平台上的账号,**发布具体内容用的就是它**。每条带三样:**平台 + 登录态 + 授权状态**。 +- **两者的关系是一对多**:一个内容账号 → N 个平台账号。同一个人设在多个平台运营,靠这条表达。 +- **为什么不做成独立对象**:做成对象的话对象字典要 11 → 12,还要重定它与 `ContentVersion`/`PublishTask`/`PublishRecord` 的边界、把 20 条流转契约重过一遍;换来的只是概念上更整齐。做成子项清单,**对象数不变,照样表达得出「一个人设多个平台号」**。 +- ⚠️ 由此**「渠道」这个词从此有确定含义 = 平台账号**,⛔ 不再用「账号 × 平台」这种把两个概念拼一起的说法。 + +**三条传递规则**(全篇只要写流转就按它写): + +1. 跨页面只传 ID 加必要上下文,不传页面临时状态。 +2. 一个对象只有一处**权威数据**。别处要用,是去消费它,不是各存一份。🔴 这一条管的是**权威数据只有一个源**,⛔ **不管写入动作发生在哪一页** —— 资产条目可以在 P2/P3/P4 任何一页就地入库(写入动作的地点不限),但它的**权威记录只有一份**,统一由资产库页管(§一 第 4 条)。 +3. 目标页接到 ID 之后必须能自己把状态恢复出来 —— 恢复不出来,说明这个对象的产生位置写错了。 + +--- + +## 三、功能清单(14 条,按场景) + +字段从上到下固定八样:功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面,最后跟一条「治理」。 + +优先级只给 P0/P1/P2 加一句可复述的判据,⛔ 不填数字(本项目没有任何数据源)。 + +### S1 找选题 + +#### F1 对标账号监控与爆款异常值识别 + +- **功能名**:盯住几个对标账号,把「数据远高于它平时水平」的内容挑出来。 +- **来自哪条场景**:S1 +- **优先级**:P0 —— 判据:不做则 S1 整条办不成。 +- **核心业务对象**:`Benchmark` 对标号(连带产出 `Topic` 候选) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → fetching → hit / miss`。事件=刷新、恢复自动更新;守卫=平台授权有效(🔴 **依赖 A2**,见 §六);失败 ⇒ 迁 `failed`。 +- **验收要点**:录入一个对标号后,能看到它近 3 天的更新;能指出哪几条是异常值(标注了它相对该号平时水平的倍数);刷新失败时有明确提示而不是静默空列表。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=退避重试 3 次后转「手工录入对标号」的降级路径;持久化=监控名单与历史异常值落本地(不落全局);并发=同一对标号同时拉取走队列串行,不并发写;幂等=按「对标号 + 内容标识」去重;超时=`fetching` 上限 90 秒(设计值,实现可调),超时转 `failed`;不可逆=不涉及。 + +#### F2 选题库与灵感速记 + +- **功能名**:凡是**对选题有帮助的信息**都能收进来,再按分类把它理顺。 +- **来自哪条场景**:S1、S2 +- **优先级**:P0 —— 判据:不做则选题无处落地,S1 与 S2 都断在最后一步。 +- **核心业务对象**:`Topic` 选题(🔴 V4 放宽:一条 `Topic` = **选题库里的一条信息**,⛔ 不止「一条待做选题」) +- **归属页**:P2 选题雷达(速记入口在全局可达的位置,见 `2b-界面布局-新版.md` §四) +- **容纳范围与分类(🔴 2026-10-09 用户口径新定)**: + - **容纳范围**:凡是「对选题有帮助的信息」都收 —— 灵感、对标观察、数据异动、平台风向…(用户原话:「选题库里面可以是对选题有帮助的任何信息 分类区分就好」)。 + - **随手记仍落选题库**:⛔ **不新增「待整理」状态**、⛔ **不做多去向选择**(不要求用户当场判「这是选题还是资产还是对标」)。随手记的默认落点是选题库里的**「灵感」类**。 + - **靠分类区分**:分类是**一条信息的属性**,不是一道中途关卡。两个维度**正交**,都落在选题库内: + - **进度**(沿用现版):`待做/在写/已用` —— 回答「这条做到哪一步了」。 + - **类型**(V4 新增):`选题/对标线索/评论洞察/数据异动/灵感` —— 回答「这条是什么、下一步去哪」,每类自带一个后续动作: + ① **选题** ⇒ 转入创作; + ② **对标线索** ⇒ 去资产库拆解; + ③ **评论洞察** ⇒ 采纳成选题; + ④ **数据异动** ⇒ 参与选题判断(做或不做同题); + ⑤ **灵感** ⇒ 续写,或升级成上面任一类型(**随手记的默认落点**)。 + - ⚠️ 分类的**呈现方式**(放在哪、怎么切)由③段定,②段只定「两个维度、五类、每类的后续动作」。细节见 `2b-界面布局-新版.md` §五 P2。 +- **状态流转**:`draft → 待做 → 在写 → 已用 / 弃用`。事件=记录、转待做、转在写、标已用、弃用;守卫=转「已用」需已关联到一条内容;弃用可恢复(可逆)。🔴 **类型与进度是两个维度**:改类型不改进度,改进度不改类型。 +- **验收要点**:连着记 5 条灵感,重启后 5 条都在;一条灵感能被标记为「已用」并追到它变成了哪条内容;一条灵感能被升级成一个「选题」类条目而**不用换库、不用多选一次去向**;按类型筛一遍,五类各自的后续动作都点得下去。 +- **跨哪些页面**:P2(入口全局可达) +- **治理**:失败恢复=本地写入失败时保留输入内容,不丢字;持久化=落本地知识库目录,刷新与重启后仍在;并发=同一人两个入口同时改 ⇒ 乐观重试(写临时文件 + 原子替换 + 回读核对),⛔ 不用文件锁(本机实测会卡死);幂等=同一条灵感重复提交按内容 hash 去重;超时=无中间态;不可逆=不涉及(删除走可恢复的「弃用」)。 + +#### F3 评论区洞察找选题 + +- **功能名**:从一条内容的评论区里,把反复出现的问题挑成选题。 +- **来自哪条场景**:S1 +- **优先级**:P1 —— 判据:不做仍能从 F1 得选题,只是少一路输入。 +- **核心业务对象**:`Topic` 选题(原料是评论里的 `Insight`,它不进对象字典 —— 它只在本功能内部存在,一出候选就变成 `Topic`) +- **归属页**:P2 选题雷达 +- **状态流转**:`idle → 抓取中 → 已出候选 → 已采纳 / 忽略`。事件=抓取、采纳、忽略;守卫=设定过「最多获取条数」与「样本排序」;🔴 **依赖待复核第 7 条**(数据来源与频率未定)。 +- **验收要点**:给一条视频,能按「点赞最多」取出前 N 条评论并给出至少一条可采纳的候选选题。 +- **跨哪些页面**:P2 +- **治理**:失败恢复=抓取失败转手工粘贴评论;持久化=候选选题落本地;并发=同一内容同时抓取走队列;幂等=按「评论标识」去重;超时=抓取中上限 60 秒(设计值);不可逆=不涉及。 + +### S2 选题进资产库 + +#### F4 爆款拆解与资产库 + +- **功能名**:把一条爆款的写法拆开,存成下次能直接拿的东西。 +- **来自哪条场景**:S2 +- **优先级**:P0 —— 判据:不做则 S2 整条办不成;`1a` §六 F4 注明「这一条决定了『越用越准』」。 +- **核心业务对象**:`Asset` 资产条目 +- **归属页**:P3 资产库 🔴 **V4 写清两件事**: + 1. **资产库页的职责是「统一管理」** —— 分类分区、检索、单条详情、来源与引用关系、维护。⛔ 它**不再是唯一的入库口**。 + 2. **入库动作不限页** —— P2(对标内容发起拆解)、P4(创作时沉淀写法)产生的资产都可以**就地入库**;不管在哪一页写进去,落下来的仍是**同一份**资产条目、统一由 P3 管。 + ⚠️ **「入库不限页」⛔ 不等于「归属页有多个」**:归属页按「谁统一管它」定,仍是 P3;别的页只是入口(对应 §一 第 4 条)。 +- **状态流转**:`未拆 → 拆解中 → 待入库 → 已入库 / 退回`。事件=发起拆解、入库、退回;守卫=入库前过门禁(见治理);退回后原件保留。 + 🔴 资产库本身有四个分区(角度、结构、开场白、标题),各区条目独立流转,互不阻塞。 +- **验收要点**:拆完一条爆款,四个分区里各能看到至少一条新条目;条目的原文与出处可回溯;拿 20 条真实爆款入库,隔一周回来能找回想要的那条;**在选题页就地拆解入库的一条,在资产库页照样能检索、能引用**。 +- **跨哪些页面**:P2、P3、P4(入库动作在任一处都能发生)+ P4(消费) +- **治理**:失败恢复=拆解失败保留原文,可重试;持久化=入库结果落本地,带原文与出处链接;并发=同一素材重复拆解按素材 hash 幂等;幂等=同一条目重复入库不产生副本;超时=拆解中上限 180 秒(设计值,长任务),超时转 `待入库` 并保留中间结果;不可逆=**入库前设门禁**(对策 R3):无出处的、原文缺失的一律先设 `draft`,`draft` 可删,`已入库` 删除需二次确认。 + +### S3 走完创作流水线 + +#### F6 创作流水线 + +- **功能名**:把一条选题从「聊思路」一路做到成稿,文案、标题、封面齐。 +- **来自哪条场景**:S3 +- **优先级**:P0 —— 判据:不做则 S3 整条办不成。 +- **核心业务对象**:`Content` 内容 +- **归属页**:P4 创作台 +- **状态流转**:`选题态 → 思路态 → 文案态 → 标题态 → 封面态 → 检查态 → 成稿态`;每一态可回退到上一态。事件=推进、回退;守卫=**推进到「检查态」前文案与封面必须都有**(封面缺 ⇒ 提示但不硬阻);成稿态可再编辑(回 `文案态`)。 + 🔴 这条守卫是业务规则,③段原型现在的无条件推进要按它改(现状 `D1`)。 +- **验收要点**:一条选题能一路走到成稿,中途不必离开这一处;每一步的产物都存得住;用户全程不需要自己选技能。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=任一步 AI 调用失败保留已产出内容,可重试该步;持久化=每一步的产物落本地并按内容 id 归档;并发=同一条内容两个窗口同时改 ⇒ 写临时文件 + 原子替换 + 回读核对,检测到覆盖则提示;幂等=重复点「起标题」生成新版本而不覆盖(接 F8);超时=任一步上限 180 秒(设计值),超时保留中间结果;不可逆=不涉及(这一步没有对外动作)。 + +#### F8 内容与素材的版本管理 + +- **功能名**:改稿产生新版本,旧版本还在。 +- **来自哪条场景**:S3、S4 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠手工另存,容易盖掉)。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属收紧**:上一版写「P4、P5」,本版只归 P4。存版本这个动作产出版本对象,版本对象的产生位置在 P4;P5 只是拿到已经存在的版本去发。 +- **状态流转**:`v1 → v2 → … → 当前版`;每个版本可标「当前」。事件=编辑保存、切换当前版;守卫=切换当前版不影响已发布记录指向的版本;终态可再次编辑(回出新版本)。 +- **验收要点**:改一版再改一版,两版都在;已发布的那条记录仍指向它当时用的版本;能看出某一版是基于哪一版改的。 +- **跨哪些页面**:P4 +- **治理**:失败恢复=保存失败保留编辑中内容;持久化=全部版本落本地,不覆盖;并发=同一条内容两处同时保存 ⇒ 后保存的产生新版本,同时提示「上游已变」(对应 1b 里 `stale` 的做法);幂等=同样内容重复保存不产生新版本;超时=无中间态;不可逆=**删除某个版本需二次确认**。 + +#### F14 录制卡片与画板 + +- **功能名**:把成稿变成一张对着讲的知识卡片。 +- **来自哪条场景**:S3 +- **优先级**:P2 —— 判据:不做不影响 S3 办成,只是更好用。 +- **核心业务对象**:`Content` 草稿(产出的是这条内容的一个呈现,不是新对象) +- **归属页**:P4 创作台 🔴 **归属改了**:上一版标 P2,本版归 P4,入口可以留在 P2。 + 判据用第 2 条:它动的是创作过程中的内容生产,不是选题发现能力。P2 能有的只是一颗「开始创作」的动作入口,功能本身不归 P2。 + 这条同时把现状 `D3` 的四处不一致收成一处:①段场景里在、②段功能清单里在、②段页面骨架里在(本版把它写进 P4 的板块)、③段要跟着补进创作环节。 +- **状态流转**:`无 → 已生成 → 已同步`。事件=生成、同步到画板;守卫=成稿态才可生成。 +- **验收要点**:一条成稿能生成卡片;卡片能落到画板里被打开。 +- **跨哪些页面**:P4(入口可在 P2) +- **治理**:失败恢复=生成失败可重试;持久化=卡片与画板落本地;并发=同一内容重复生成按内容版本幂等;幂等=同版本不重复生成;超时=上限 60 秒(设计值);不可逆=不涉及。 + +### S4 一份母版变多份 + +#### F7 一份母版到多平台账号版本 + +- **功能名**:母版改一次,按各**平台账号**的口径各出一版。 +- **来自哪条场景**:S4 +- **优先级**:P0 —— 判据:不做则 S4 整条办不成。 +- **核心业务对象**:`ContentVersion` 内容版本 +- **归属页**:P4 创作台 🔴 **归属整条改了**:上一版是「P4 出成稿、P5 展开并逐版确认」,两头各做一半,P4 侧连入口都没有(现状 `C4`/`C6`)。本版一句话分清:**P4 决定发什么版本,P5 决定怎么把这个版本发出去。** + 展开这个动作发生在 P4(母版 → 版本策略 → **平台账号** → 生成各版),P5 只负责拿已经存在的版本去检查、去发。 +- **展开单位(🔴 2026-10-10 用户口径改)**:**按平台账号展开** —— 一个内容账号下面的**每个平台账号各一版**。 + 用户原话:「**一个内容账号 投放时应该有多个平台账号用于分别投放**」。 + ⛔ 不再写「账号 × 平台」:那是把「内容账号」与「平台」当成两个正交维拼起来,概念分开之后这个组合**天然不存在**(一个抖音号不可能是 B 站号)。 + ⚠️ 「分别投放」是**靠「分别成版」实现的**,⛔ 不是靠「一个版本同时发多处」。 +- **状态流转**:`母版 → 已展开(多版本)→ 逐版确认 → 就绪`。事件=展开、逐版编辑、确认;守卫=**每个版本必须绑一个内容账号 + 它下面的一个平台账号**(上一版写「一个账号 + 一个平台」,V4 按两个概念分开后的口径改);未确认的版本不许进发布闸门。 + 🔴 依据界线(照 1a 复核后的写法):Easel 发布中心**直证的是「多平台」**(一处编辑、八端预览,源码级 + 界面级);**「多账号」的依据是 Easel 的多画像支持加本产品的矩阵需求**,发布中心没看到逐账号变体。 +- **验收要点**:母版改一次,各平台账号的版本跟着更新;一个内容账号下面挂了 3 个平台账号,展开就出 3 版;改漏了某个平台账号能被发现;超限的地方当场标出来。 +- **跨哪些页面**:P4(展开与逐版确认)、P5(拿这些版本去发) +- **治理**:失败恢复=展开中断保留已生成的版本;持久化=每个版本独立落本地;并发=两处同时展开按「母版版本 + 目标平台账号」幂等;幂等=同母版同平台账号不重复展开;超时=展开上限 120 秒(设计值);不可逆=不涉及(确认可撤回,未发布的版本可删,删除需二次确认)。 + +### S5 发之前先过闸 + +#### F5 发布前分级闸门 + +- **功能名**:发之前,硬的拦住、软的只提醒。 +- **来自哪条场景**:S5 +- **优先级**:P0 —— 判据:不做则 S5 整条办不成。 +- **核心业务对象**:`PublishTask` 发布任务 +- **归属页**:P5 发布中心 +- **界线(照 1a 复核后的写法,⛔ 不是旧版措辞)**:硬闸管**敏感信息**(账号密钥、内部路径这类),不过就不许发;软闸管**人设一致性**(低于阈值只告警,不阻断)。⚠️ 竞品里**没有「敏感词检测」,也没有「事实检测」**——照旧版写会把功能带偏成一个竞品池里没人做过的「事实核查器」。 +- **状态流转**:`未检 → 检查中 → 通过 / 有硬拦 / 有软劝`。事件=发起检查、改完复检;守卫=有硬拦项时「去发布」不可用;软劝不阻断但要在发布确认页可见。硬拦项改完才能过。 +- **验收要点**:一份带敏感信息的稿子会被拦住且说得出是哪一处;一份人设偏移的稿子只提醒、不拦;改完能复检并通过。 +- **跨哪些页面**:P5 +- **治理**:失败恢复=检查本身失败按**不过**处理(fail-closed,宁拦不放);持久化=每次检查结果留痕,随发布记录一起存;并发=同一内容重复检查以最后一次为准;幂等=同一版本重复检查结果一致;超时=检查上限 60 秒(设计值),超时按不过处理;不可逆=**「去发布」这一步必须人确认**(read-first / draft-first)。 + +#### F13 发布留痕与人工确认记录 + +- **功能名**:谁在什么时候确认发的、发的是哪一版,查得到。 +- **来自哪条场景**:S5 +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(靠聊天记录回溯,且回溯成本高)。 +- **核心业务对象**:`PublishRecord` 发布记录 +- **归属页**:P5 发布中心(产生记录)、P7 复盘台(查记录 —— 原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **一版一路(🔴 2026-10-10 用户口径新定,V4 显式写出来)**:**一个渠道(=一个平台账号)只对应一个版本。** 因为版本是**按平台账号展开**的(F7),所以「渠道」由版本**唯一确定** ⇒ `PublishRecord` **不加渠道字段**,它记的「哪一版」已经说明是哪个渠道。 + 用户原话:「一条内容对应多个发布渠道」⇒ 主体是**内容**,一条内容对应多个渠道;而每个渠道各有一版、各产生一条发布记录。⛔ 不写成「一个版本同时发多处」。 +- **状态流转**:`草稿 → 待审 → 已确认 → 已发布 → 已归档`。事件=送审、确认、登记发布、归档;守卫=`已发布` 需要先有「已确认」记录;**组织级急停**可把任意 `待审` 打回 `草稿`。 +- **验收要点**:每条发布都能查到确认人与时间;能看出这条发的是哪一版;**一条内容发了 3 个渠道 ⇒ 有 3 条记录,每条记录指向它自己那一版,靠版本就能分清渠道**;急停能拦住所有待审项,恢复后之前的草稿还在。 +- **跨哪些页面**:P5、P7 +- **治理**:失败恢复=登记失败保留草稿状态;持久化=审计轨迹落本地,只追加不改写;并发=同一内容两处送审按「内容版本」幂等;幂等=重复确认同一版本不产生第二条记录;超时=`待审` 上限 72 小时(设计值),超时提醒发起人,不自动放行;不可逆=**发布、删帖、组织级急停三件事形态不一样,别压成一句**:发布是人的动作;删帖带破坏性标注,需二次确认;急停的触发与恢复都只有人能做。 + +### S6 效果回写 + +#### F9 多账号画像、平台账号与记忆 + +- **功能名**:每个**内容账号**有自己的口径和记忆,互不覆盖;它下面的**平台账号**(发布渠道)也在这里维护。 +- **来自哪条场景**:S6、S7 +- **优先级**:P0 —— 判据:不做则 S6 整条办不成(表现无处可回)。 +- **核心业务对象**:`Account` 内容账号(连带它的长期记忆,以及它下面的**平台账号子项**) +- **归属页**:P6 账号画像 +- **界线(🔴 2026-10-10 用户口径新定)**: + - **内容账号管的是内容属性** —— 账号设定(定位/风格/受众/偏好与红线/长期记忆)。**平台不属于它**。 + - **平台账号是发布的渠道** —— 每条带**平台 + 登录态 + 授权状态**。登录态归它(能不能发出去是它的事),内容账号不带登录态。 + - 一个内容账号 1 → N 个平台账号;**同一个人设在多个平台运营**靠这条表达。 +- **状态流转**:`空 → 已建 → 使用中 →(复盘回写)→ 使用中`。事件=建画像、编辑、被复盘回写;守卫=一个账号一份画像,账号标识唯一;回写只追加记忆条目,不改历史结论。 + 🔴 **平台账号子项另有一条状态**:`未接入 → 已登录 / 登录失效 → 已授权 / 授权到期`。守卫=**授权失效的平台账号不许进发布闸门**(P5 发不出去这件事在这里拦)。 +- **验收要点**:两个内容账号各自的画像互不影响;一条内容复盘后,对应账号的画像里多出一条记忆;并排跑两个账号的创作,谁都不覆盖谁;**一个内容账号下面挂 3 个平台账号,各自带自己的登录态与授权状态、互不串台**。 +- **跨哪些页面**:P6 +- **治理**:失败恢复=保存失败保留编辑内容;持久化=**记忆作用域收敛到画像目录,⛔ 不写全局文件**(对策 R4:多账号并发写全局会互相覆盖);并发=多账号并行读同一份画像,写只写自己那一份;幂等=同一条记忆重复回写按内容 id 去重;超时=无中间态;不可逆=删除画像需二次确认(会连带删它累积的记忆与它的平台账号接入信息)。 + +#### F10 效果复盘与归因回写 + +- **功能名**:一条内容跑完,把它的表现读回来,写成这个账号的经验。 +- **来自哪条场景**:S6 +- **优先级**:P0 —— 判据:不做则 S6 办不成,整个闭环断在最后一步。 +- **核心业务对象**:`Review` 复盘结论(原料是 `Performance` 表现数据) +- **归属页**:P7 复盘台 +- **状态流转**:`待复盘 → 读数据中 → 已归因 → 已裁决 → 已回写`。事件=发起复盘、人工裁决、回写;守卫=先有发布记录(F13);**回写前必须人确认归因结论**(`Review.confirmed = true` 才允许回写)。 + 🔴 **顺序写死了**:表现数据 → 系统归因 → 人工裁决 → 允许回写。上一版只写了「回写前必须人确认」,但没说清裁决是回写的前置开关还是只留痕;③段原型因此按「只留痕」实现(现状 `D2`)。本版按业务规则定为**前置开关**:没有人工裁决,回写这一步不成立。 + 🔴 本组**只有 Easel** 做成了这个闭环(源码级),⛔ 不写成「多家都做了」。 +- **验收要点**:一条已发布内容能复盘出结论;结论能回写到对应账号的画像;回写后下一轮做这个账号时能看到这条经验。 +- **跨哪些页面**:P7、P6(回写的落点) +- **治理**:失败恢复=数据读不到时降级为手工录入表现;持久化=复盘结论与回写记录落本地;并发=同一条内容重复复盘按内容 id 幂等;幂等=同一次复盘重复回写不重复追加记忆;超时=读数据上限 90 秒(设计值),超时转手工录入;不可逆=**回写会改画像记忆,需人确认**(不自动写)。 + +### S7 看整个矩阵 + +#### F11 矩阵级看板 + +- **功能名**:一屏回答每个账号今天该发什么、发了什么、效果如何。 +- **来自哪条场景**:S7(🔴 **整条标【假设】**,待复核第 5 条) +- **优先级**:P1 —— 判据:不做则场景办得成但要多绕(逐账号点进去看);若第 5 条复核为「不需要矩阵级视图」,本条可整体砍掉。 +- **口径写实(本版改了)**:状态标 **待验证**,定位标 **非主链能力**。它不承担主生产链上的任何一环,也不该被包装成「已经有了的完整功能」。影响页面只有 P1。 +- **核心业务对象**:`Performance` 表现数据(只读,不产生对象) +- **归属页**:P1 矩阵总览 +- **状态流转**:无状态(只读视图)。事件=进入、切换账号、下钻。 +- **验收要点**:一屏能看到矩阵下每个账号的今日状态与效果;数据不新鲜时看得出来。 +- **跨哪些页面**:P1 +- **治理**:失败恢复=数据源不可用时显示「数据未更新」并给出时间戳,⛔ 不显示空白冒充正常;持久化=视图本身不落库,只读上游;并发=只读,无冲突;幂等=只读;超时=无;不可逆=不涉及。 + +### S8 商单与内容对账 + +#### F12 商单与收支记录、内容对账 + +- **功能名**:一条内容带了商单,内容、发布记录和收支对得上。 +- **来自哪条场景**:S8(🔴 **整条标【假设】**,待复核第 6 条;另依赖 **A3**) +- **优先级**:P2/Deferred —— 判据:不做不影响场景办成,只是更好用。本条不进第一版主链,标 `Deferred`,等第 6 条复核结果再定去留。 +- **核心业务对象**:`Campaign/Order` 商单与收支 +- **归属页**:P7 复盘台(原 P8 记录与对账整页已并入 P7,见 `2b` §五) +- **状态流转**:`未登记 → 已登记 → 待结算 → 已结算`。事件=登记、核对、标结算;守卫=`已结算` 需内容与发布记录都已关联;可反结算(可逆)。 +- **验收要点**:一条带商单的内容能查到它的发布记录与收支;对账时不需要翻聊天记录。 +- **跨哪些页面**:P7 +- **治理**:失败恢复=登记失败保留输入;持久化=收支记录落本地;并发=同一条记录两处改按记录 id 幂等;幂等=同一内容同一口径不重复登记;超时=无中间态;不可逆=标「已结算」后修改需二次确认。 + +--- + +## 四、功能归属总表(F1–F14) + +这张表是本版新加的。上一版的归属散在每条末尾的「跨哪些页面」里,没有一处能一眼看全,也就没法复核。 + +| 功能 | 来自 | 核心业务对象 | 归属页 | 与上一版的差异 | +|---|---|---|---|---| +| F1 对标账号监控与爆款异常值识别 | S1 | `Benchmark` | P2 | 无 | +| F2 选题库与灵感速记 | S1 S2 | `Topic` | P2(入口全局可达) | 🔴 **V4 改了口径**:容纳范围放宽成「对选题有帮助的任何信息」,靠**进度 × 类型**两个维度分类(⛔ 不新增「待整理」状态) | +| F3 评论区洞察找选题 | S1 | `Topic` | P2 | 无 | +| F4 爆款拆解与资产库 | S2 | `Asset` | P3 | 🔴 **V4 改了**:`Asset` 产生位置由 P3 改成 **P2/P3/P4 均可**;P3 的职责由「入库口」改成「统一管理」 | +| F5 发布前分级闸门 | S5 | `PublishTask` | P5 | 无(对象定义随 §二 更新) | +| F6 创作流水线 | S3 | `Content` | P4 | 无 | +| F7 一份母版到多平台账号版本 | S4 | `ContentVersion` | **P4** | 🔴 **V4 改了**:展开单位由「账号 × 平台」改成**按平台账号展开**;守卫改成「内容账号 + 它的一个平台账号」 | +| F8 内容与素材的版本管理 | S3 S4 | `ContentVersion` | **P4** | 无 | +| F9 多账号画像、平台账号与记忆 | S6 S7 | `Account` | P6 | 🔴 **V4 改了**:功能扩到「平台账号(发布渠道)也在这里维护」;`Account` 改写成**内容账号**,平台账号做成它下面的子项 | +| F10 效果复盘与归因回写 | S6 | `Review` | P7 | 无 | +| F11 矩阵级看板 | S7【假设】 | `Performance` | P1 | 无 | +| F12 商单与收支记录、内容对账 | S8【假设】 | `Campaign/Order` | **P7** | 无(V4 起归属理由由「同类事」给出:发布之后看收入) | +| F13 发布留痕与人工确认记录 | S5 | `PublishRecord` | P5(产生)/**P7**(查) | 🔴 **V4 改了**:补「**一版一路**」—— 渠道由版本唯一确定,`PublishRecord` **不加渠道字段** | +| F14 录制卡片与画板 | S3 | `Content`/草稿 | **P4**(入口可在 P2) | 无 | + +七页各自「核心对象」与「不应该负责」两栏在 `2b-界面布局-新版.md` §五,本份不重复。 + +--- + +## 五、与上一版的实质差别(逐条) + +这一版不是同一批句子换了个说法。下面逐条写改在哪,能对照原文核。 + +**V4 本轮(相对 V3 · 八条口径)** + +1、**归属判据换了一条**(§一 第 2 条):由「看它动的是哪个对象」改成「**这是哪一类事,同类事放同一页**」。对象那层**保留**,但降为**落地手段**。拿新判据复核七页 ⇒ **页集合一个没动**(七页各自都是「一类事」)。 +2、**新增 §一 第 4 条**:「一个对象只有一处」管的是**权威数据**,⛔ 不管写入动作发生在哪一页。这条是**新增**的,上一版没有(它正是「资产入库不限页」与「一处产生」看似打架的根因)。 +3、**`Asset` 的产生位置由 P3 改成「P2/P3/P4 均可」**,并写明资产库页的职责是**统一管理**、不再是唯一入库口(§二 + §三 F4)。 +4、**`Account` 整行重写**(§二):由「矩阵里的一个账号,带它的画像与长期记忆」改成「**内容账号**:管内容属性的主体,**平台不属于它**」;**平台账号**做成它下面的**子项清单**(带平台 + 登录态 + 授权状态),**不加对象**(仍是 11 个)。新增一段专门说明两个概念的分野与「为什么不做成独立对象」。 +5、**`PublishTask` 的定义改了**(§二):由「含目标账号与平台」改成「含**发布渠道**」(渠道 = 平台账号)。 +6、**`Topic` 的定义放宽**(§二):由「一条待做/在写/已用的选题」改成「**选题库里的一条信息**」,并带上**分类**。对应 §三 F2 重写成一个「容纳范围 + 两个正交分类维度(进度 × 类型,五类各带后续动作)」的条目。 +7、**F4 的归属页段落重写**:写清「资产库页=统一管理」与「入库动作不限页」,并明说**「入库不限页」不等于「归属页有多个」**。验收要点与「跨哪些页面」同步。 +8、**F7 改名并改展开单位**:「一份母版到多账号多平台版本」→「**一份母版到多平台账号版本**」;守卫由「一个账号 + 一个平台」改成「**一个内容账号 + 它下面的一个平台账号**」;幂等键同步改成「母版版本 + 目标平台账号」。⛔ 全文不再出现「账号 × 平台」。 +9、**F9 改名并扩范围**:「多账号画像与记忆」→「**多账号画像、平台账号与记忆**」;新增界线段(内容账号管内容属性、平台账号是渠道、登录态归它);新增平台账号子项的状态流转(`未接入 → 已登录 / 登录失效 → 已授权 / 授权到期`)与守卫(授权失效不许进发布闸门)。 +10、**F13 补「一版一路」**:一个渠道只对应一个版本 ⇒ 渠道由版本唯一确定 ⇒ `PublishRecord` **不加渠道字段**。验收要点补「一条内容发 3 个渠道 ⇒ 3 条记录,靠版本分清渠道」。 +11、**§四 总表的「与上一版的差异」栏**重写,把 V2 那批差异折叠进历史(避免一张表里混着三个版本的说法)。 +12、**§九 更新**:上一轮遗留的三条待拍板(账号带不带平台 / `PublishRecord` 带不带渠道字段 / 要不要做定时)**前两条已随本次口径落定**;第三条(定时发布)按用户 2026-10-10 07:56 逐字「后续具体做投放功能的时候在说」**挂起**,并带上回收三字段。 +13、**功能清单仍是 14 条、编号一个没动**,优先级判据一个没改;治理六项覆盖不变。本轮动的是**判据、对象定义与三处措辞**。 + +**V3 本轮(相对 V2)** + +1、**P8 记录与对账整页并入 P7 复盘台**,页 ID 里不再有 P8。F12、F13 的归属页随之改:F12 由 P8 改 **P7**;F13 的「查记录」那一头由 P8 改 **P7**(「产生记录」仍在 P5)。 +2、**对象字典的「被谁消费」栏把 P8 全部并入 P7**:`Account`、`ContentVersion`、`PublishTask`、`PublishRecord`、`Performance`、`Campaign/Order` 六行里凡出现 P8 的,一律改 P7(§二)。对象本身一个没增没减,仍是 11 个。 +3、**导航改一层七项**(首页/选题/创作/投放/复盘/账号/资产),页集合由八页收成七页。本份只承接它对功能归属的影响;导航表见 `2b` §三。 +4、**功能与板块的对应写成可机检关系**。判据没变(仍看核心业务对象),变的是「每页每个板块承担哪条功能」被逐块写下来并由自检双向核(原型 `FN_HOME`/`FN_MAP`,`2b` 附自检 5b-3)。 +5、**功能清单仍是 14 条、编号一个没动**,优先级判据一个没改。本轮动的是归属页与页集合,不是功能本身。 + +**V2(相对 V1)** + +6、**新增「核心业务对象字典」(§二,11 个对象)**。V1 完全没有这一层,`1a` 与 `1e` 里也没有。它是本版所有归属判断和流转契约的地基。 +7、**新增「功能归属总表」(§四)**。V1 没有任何一处能一眼看全 14 条功能的归属。 +8、**新增三条判据(§一)**。V1 只说了「按场景组织、不按页面」,没说归属怎么判、跨页传什么。第 2、3 条是 V2 第一次写下来。 +9、**每条功能从六字段扩到八字段**,新增「核心业务对象」与「归属页」两栏。原来的「跨哪些页面」保留,但它现在只描述落点,不再承担归属判据。 +10、**F7 归属改了**:从两头各半改成 P4 单一归属,并写死分工「P4 决定发什么版本、P5 决定怎么发」。V1 `2b:283` 那句「在 P4 出成稿,在 P5 展开并逐版确认」按此作废。 +11、**F14 归属改了**:从 P2 改成 P4,入口可留 P2。 +12、**F8 跨页收窄**:从「P4 创作台、P5 发布中心」改成 P4。 +13、**F11 口径写实**:从一条 P1 的 P1 级功能,改标「待验证/非主链能力」。 +14、**F12 口径写实**:标 `P2/Deferred`,明确不进第一版主链。 +15、**F10 状态流转从三态扩到五态**(加了「已裁决」「已回写」分开),并把「裁决是回写的前置开关」写死。V1 只写「回写前必须人确认」,没写清是开关还是留痕 —— ③段就是照「留痕」实现的(现状 `D2`)。 +16、**F6 的守卫在条目里写实**:明确标出这条守卫要③段改(现状 `D1` 是无条件推进)。 + +**两个版本都没改的** + +17、14 条功能的编号、来自哪条场景、优先级判据,一个都没动。`1e` §四 的「场景 → 功能」反向核对依然成立。 +18、清单主体**仍按使用场景组织**(沿用 2026-10-06 用户定案),⛔ 没有改成按页面。GPT 的「按业务对象重新解耦」落在**归属判据**上,没落在清单组织方式上 —— 这两件事不同,没把它们混成一件事。 +19、六项治理全覆盖照旧,落点仍在功能条目内(§七 给了落点清单)。 +20、§六 的假设依赖、§八 的不做清单对照,条目数照旧(9 条假设、8 条不做对 13 条已拍板项)。 + +--- + +## 六、依赖假设的条目(逐条标出) + +⭐ 1a 的 9 条待复核与 A1–A4 **全部未经用户确认,⛔ 不当事实用**。本份凡依赖它们的条目列在下面,写清「依赖哪条、不成立会怎样」。 + +本版比上一版多说一层:这些假设不成立时,**受影响的核心业务对象也跟着变**,所以影响面不止那一页。 + +| 功能 | 依赖 | 假设内容 | 不成立会怎样 | +|---|---|---|---| +| F1 | **A2** + 待复核第 2 条 | 平台数据靠官方接口或授权方式拿 | 自动拉取这条路断,退化成手工录入对标号;`Benchmark` 与 `Topic` 的来源少一路,S1 的「不用刷榜」打折 | +| F10 | **A2** + 待复核第 2 条 | 同上 | 效果数据读不回来,`Performance` 只能手工录入,`Review` 的归因依据变弱,S6 降级 | +| F11 | **A1** + 待复核第 5 条 | 账号数 10–50;矩阵级视图确实需要 | 账号数超出 ⇒ P1 的组织方式要重设计;视图不需要 ⇒ F11 可整体砍掉,P1 页重画 | +| F9 | **A1** | 账号数 10–50 | 同 F11;且 `Account` 的数量与存储组织要跟着变 | +| F12 | **A3** + 待复核第 3、6 条 | 收支口径是「内容级」;商单对账进不进第一版 | 口径若是月级 ⇒ `Campaign/Order` 的对象粒度要重定,本条整条重做;不进第一版 ⇒ 保持 `Deferred` | +| F5 | **A4** + 待复核第 4 条 | 团队 5–20 人、审批不超过三层 | 审批层数超三层 ⇒ `PublishTask` 的审批模型要重做 | +| F13 | **A4** + 待复核第 4 条 | 同上 | 同上 | +| F3 | 待复核第 7 条 | 评论洞察的数据来源与频率未定 | 数据来源定不下来 ⇒ F3 退成手工粘贴评论 | +| (无功能) | 待复核第 8 条 | 「整合营销」含不含投放 | 若含投放 ⇒ 需要新增一条场景(`1e` §六),本份没有对应功能,⛔ 不编 | +| (策略层) | 待复核第 9 条 | 只服务一个机构自用 vs 可交付产品 | 影响 `1d-产品策略.md` §7、§9 与权限体系是否进第一版,不影响本份功能骨架 | + +**假设三归宿**(方法论要求,⛔ 不许长期悬空):上表 9 条**全部**落在「② 待实现且已排定确认时机」这一档 —— 确认时机统一为「②段收口时由主会话转用户一次性过;未过之前,③段不得把这些条目当硬约束用」。落「① 已确认」的:**无**。落「③ 已按假设落地」的:**无**。 + +--- + +## 七、六项治理覆盖核对 + +判据源 `state-machine.md` 的必答清单。⛔ 不留空,不适用写「不适用」。 + +| 治理项 | 落点(哪些功能显式写了) | 最要紧的一条 | +|---|---|---| +| 失败恢复路径 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F11 F12 F13 F14 | F5 走 **fail-closed**(检查失败按不过处理),本组唯一一条「宁拦不放」 | +| 持久化范围 | 全部 14 条 | F9 的**记忆作用域收敛到画像目录、不写全局**(对策 R4);F13 的审计轨迹**只追加不改写** | +| 并发冲突 | F1 F2 F3 F6 F7 F8 F9 F12 | 统一做法:写临时文件 + 原子替换 + 回读核对,⛔ 不用文件锁(本机实测会卡死) | +| 幂等 | F1 F2 F3 F4 F6 F7 F8 F9 F10 F12 F14 | F4 与 F8 的**重复入库/重复保存不产生副本、也不覆盖旧版** | +| 超时迁移目标 | F1 F3 F4 F5 F6 F7 F10 F13 F14 | F13 的 `待审` 超时**只提醒、不自动放行** —— 不可逆动作不许靠超时自动过 | +| 不可逆操作二次确认 | F4 F5 F8 F9 F10 F12 F13 | F5 + F13:**发布、删帖、组织级急停三件形态不同**,分别按「人的动作 / 二次确认 / 只有人能触发与恢复」处理 | + +补一条方法论要求的分工说明:**发布这个动作本身留在人手里**(read-first / draft-first,源码级);**删帖**带破坏性标注、属需二次确认的一类;**组织级急停**的触发与恢复都只有人能做。⚠️ 三件事的「人来做」形态不一样,⛔ 不压成一句话。 + +--- + +## 八、「不做」清单与①段已拍板项的逐条对照 + +**对照方法**:本份列出的「不做/移出/暂缓」共 **8 条**,逐条对 `1a-需求文档.md` 的已拍板项 **13 条**(来源:§一 不做什么 4 条 + §八 第一版不做 5 条 + §八 三个入口 1 条 + §三 三条差位的取舍结论 1 条 + §六 治理段「人来做」的三件事分开记 3 条 —— 去重后按条计)。 + +| # | 本份的「不做/移出/暂缓」 | 1a 原条目与口径 | 拟改口径 | 理由 | 差异 | +|---|---|---|---|---|---| +| 1 | 不做平台自动化代发 | §一 不做什么;§八 第一版不做 | 不变 | 走 F5 + F13 的人确认路径 | 无 | +| 2 | 不做矩阵级自动投放优化 | §八 第一版不做 | 不变 | 1b 里五家都没这一段证据 | 无 | +| 3 | 不做跨机构协作与权限体系 | §八 第一版不做 | 不变 | A4 假设团队不超过三层审批 | 无 | +| 4 | 不做移动端 App | §八 第一版不做 | 不变 | — | 无 | +| 5 | 不把平台数据抓回来做数仓 | §八 第一版不做 | 不变 | 只对接与留痕 | 无 | +| 6 | 不自建投放系统 | §一 不做什么 | 不变 | 只对接与留痕 | 无 | +| 7 | 不做个人版单账号工具 | §一 不做什么 | 不变 | 面向一个账号矩阵 | 无 | +| 8 | 第一版不铺「三个入口」之外的界面 | §八「这一版只留的三个入口」 | 不变 | 找选题 / 走创作流水线 / 看矩阵复盘 | 无 | + +**结论**:**8 条对照完,差异行 0**。没有一条涉及已拍板项的口径改动,因此没有「与已定决策的差异」表要交用户确认。 + +**一条待确认项**(不是「不做」,是「暂缓」,必须带回收三字段): +本份把 **F12** 标为 `P2/Deferred`。这是一条暂缓。 +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过 +- 结论落点 = 本文件 §三 F12 条目与 §六 依赖表 + +--- + +## 九、待与用户确认项 + +派活单要求:涉及改②段结构的三条「部分采纳」先按 GPT 的方向落地,但必须在文末单列。以下是本份范围内的全部待确认项,逐条给「为什么它没被自己拍板」和回收三字段。 + +🔴 **V4 先把上一轮遗留的三条待拍板交代清楚**(它们原本堆在这里没结论): + +- **「账号带不带平台」** ⇒ **已随 2026-10-10 用户口径落定**:账号分**内容账号**与**平台账号**两个概念,平台账号做成内容账号下的子项。本条**不再是待确认项**(§二 + §三 F9)。 +- **「`PublishRecord` 带不带渠道字段」** ⇒ **已落定为「不加」**:靠「一版一路」让渠道由版本唯一确定(§三 F13)。 +- **「要不要做定时发布」** ⇒ **挂起**,见下面第 7 项。 + +**1、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 建议把②段合成一份,九节:导航结构/页面框架/功能清单/核心数据对象/状态机/页面流转契约/业务规则/异常与降级/待决事项。 +本版的处置:**内容照收,形态不收**。九节要的东西本版全部落下去了,只是分布还是两份 —— 导航、页面框架、流转契约进 `2b`;功能清单、数据对象、业务规则、异常降级、待决事项进 `2a`;状态机落在每条功能条目里。合成一份等于把「产品功能」与「界面布局」重新塞回去,而这两份是 2026-10-07 的用户定案。 +为什么不自决:合成会**新增文档层**,属于扩大可见面,得单独拍。 + +**2、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳了**三分类**(对象传递/上下文定位/状态完成),六型没进正文。 +为什么不自决:GPT 没把六型和②段那 20 条流转逐条对齐,直接搬进来就会在同一件事上造出第二份定义。要进就得先把 20 条逐条归型。 + +**3、两条新增流转要不要进②段** +GPT 的 P0 清单里有 `P7 → P1`(复盘结论 → 矩阵待办/异常/最佳内容)与 `P7 → P2`(复盘发现 → 下一轮选题)两条。第①棒逐条盘过的 18 条里**没有这两条** —— 它们是 GPT 新加的。 +本版的处置:写进 `2b` §六 的流转契约,但**逐条标了「新增·待确认」**。理由:不写进去,GPT 主张的那个「复盘反哺」闭环在文档上就是断的,第④步做界面对不上;写进去但不标,等于偷偷扩范围。 +为什么不自决:新增流转是扩范围,得用户点头。 + +**4、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。本版按假设标注,没有把它当事实用。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上。 + +**5、「投放」这一段要不要补一条场景** +`1e` §六 明写的未闭环处:`1a` §一 的链路里有「投放」,§四 有「剪辑与投放」这个角色,但 §五 的场景里没有一条是投放岗的。本版不为它出功能(无依据就是编)。 +⚠️ 与第 7 项**不是同一件事**:本条问的是「有没有一条投放场景」(场景层),第 7 项问的是「要不要做定时发布这个具体能力」(功能层)。 + +**6(沿用上一版,未清):什么算「板块」的判据** +`2b:7` 原来那句「骨架冻结、③段不许新增板块」没有定义「什么算板块」,③段因此能在各页各长一层页壳而机检看不见(现状 `A1`/`A3`)。本版在 `2b` §四 把公共框架显式定义掉了,但**「公共框架 vs 业务板块」这条线本身,最终还要用户认一次**。 + +**7、定时发布:挂起(🔴 V4 新增的登记项)** +用户 2026-10-10 07:56 逐字:「**后续具体做投放功能的时候在说**」。 +⇒ **本版不为它加任何功能条目、字段或状态**(⛔ 不编一条 F15,⛔ 不在 `PublishTask` 里塞排期字段)。 +⇒ 它是**挂起**,不是「不做」:等真做投放功能时再议。挂起期间**谁都不许拿它当已定内容用**。 +- **复核人** = 主会话转用户 +- **复核时机** = 立项做投放功能时(⛔ 不是②段收口时) +- **结论落点** = 本文件 §三 F5/F7 附近 + `2b` §五 P5 + +**回收三字段**(本份第 1–6 项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3 条、第 5 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §九 与 `2b-界面布局-新版.md` §十 + +--- + +## 十、页面清单(跨页引用用的 ID) + +本份只写「跨哪些页面」,页面骨架在 `2b-界面布局-新版.md`。为免引用悬空,页 ID 列在这里: + +P1 矩阵总览|P2 选题雷达|P3 资产库|P4 创作台|P5 发布中心|P6 账号画像|P7 复盘台 + +**导航是一层七项**(首页/选题/创作/投放/复盘/账号/资产),项与页的对应见 `2b` §三。P8 记录与对账**已整页并入 P7 复盘台**,页 ID 里不再有 P8。 + +--- + +## 附:本份自检 + +- [x] 每条功能都追回①段《使用场景》(`1e` S1–S8),14 条全覆盖;`1e` §四 的反向核对(场景 → 功能)依然成立 +- [x] 每条功能八字段齐全(功能名 / 来自哪条场景 / 优先级 / 核心业务对象 / 归属页 / 状态流转 / 验收要点 / 跨哪些页面) +- [x] 功能归属有可复核的判据(🔴 V4 换成「一类事情放同一页」,对象降为落地手段),不是「哪页有按钮」 +- [x] **拿新判据复核过七页**:七页各自都是「一类事」,页集合没动(§一 第 2 条的复核表) +- [x] **八条口径逐条落到正文**:① 判据(§一 第 2 条)② 资产入库不限页(§一 第 4 条 + §二 `Asset` + §三 F4)③ 选题库分类(§二 `Topic` + §三 F2)④ 记录与对账属复盘不拆(§三 F12/F13,页面侧落 `2b` §五 P7)⑤ 渠道定义(§二 `PublishTask`)⑥ 账号两个概念(§二 + §三 F9)⑦ 目标选择两级(页面侧落 `2b` §五 P5)⑧ F7 展开单位 + F13 一版一路(§三) +- [x] **对象数仍是 11**:平台账号做成 `Account` 下的子项,没有新增对象 +- [x] 优先级只用 P0/P1/P2 加一句判据,零数字 +- [x] 「不做」清单逐条对照①段已拍板项,**给出对照条目数(8 对 13),差异行 0** +- [x] 六项治理全覆盖,且落在功能条目内(§七 给了落点清单) +- [x] 依赖假设的条目逐条标出(§六 9 条),每条带假设状态标注与「不成立会怎样」 +- [x] 待确认项逐条带齐 复核人 / 复核时机 / 结论落点;**定时发布单列为「挂起」并写明挂牌条件**(§九 第 7 项) +- [x] 上一轮遗留的三条待拍板(账号带不带平台 / `PublishRecord` 渠道字段 / 定时发布)**逐条交代了去向**,不留悬空 +- [x] 功能归属页里不再有 P8:F12 → P7,F13 的查记录那侧 → P7(产生侧仍 P5);对象字典的消费栏同步 +- [x] 每页每个板块承担哪条功能写清,并与 `2b` 的板块清单双向对得上(可机检 `FN_HOME`/`FN_MAP`) +- [x] 全文零视觉词(配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现) +- [x] 未重开需求(grill 在①段)、未写页面结构(那是 `2b`)、未新增本段白名单外的文档 +- [x] 只读输入全部是只读使用,没改任何上游文件 + +*(说人话自评:46/50 直接性 10 / 节奏 8 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__071c5b.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__071c5b.md new file mode 100644 index 0000000..a4b63db --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__071c5b.md @@ -0,0 +1,528 @@ +# 2b 界面布局(新版 V2) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 2 子步,产出 `prd/2b-界面布局.md` +> 本版是**重做**,不是润色。上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)。 +> 只读输入:①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、②棒 GPT 意见与采纳决策、上一版 `2b-界面布局.md`、①段 `1a-需求文档.md` 与 `1e-使用场景.md`、③段原型 `ui/mcn-workbench.html`(只读,用来核现状)。 +> 判据源:`stage-requirements/SKILL.md` §2b + `assets/diagram-design/`(本份只给灰块骨架,不出图)。 +> 本份专管界面骨架:有哪几页、每页几个板块、板块怎么排、跨页带什么过去。⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能-新版.md`)。 +> ⛔ **全文零视觉词** —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。本份只说「有哪些块、什么顺序、点它带什么过去」。 + +--- + +## 〇、一屏结论 + +- 八页**一页没删**。骨架本身是对的,病在链子:18 条流转里只有 4 条真把上游产物带到了下游。 +- 本版把「③段自己长出来的那层」写进文档并且**降级**:它不再叫板块,改名**页面公共框架(Page Shell)**,不算板块数、不参与功能归属、不占冻结计数。八页那层「功能入口」**撤销**,它的内容本来就是流转表的副本。 +- 骨架冻结那句话**升级**了。原来只写「③段不许新增、移动、删除板块」,没定义什么算板块,于是③段能各页长一层而机检看不见。本版改成**对象冻结**:页面业务板块冻结,但允许调公共框架、交互入口与数据实现;**新增业务能力必须先进②段功能清单、并完成对象归属**。 +- 导航**恢复三组加一个跨组入口**(找选题/走创作流水线/看矩阵复盘,账号画像跨组),组名沿用②段现成的,⛔ 没有顺手改名。 +- 流转从「一句话」改成**契约**:20 条逐条写六样(来源/触发/传递对象/对象 ID/目标接收/落地状态),并按三类分开。其中 18 条是②段原有的,2 条是新增的,**两条都标了「新增·待确认」**。 +- 每页补两栏:**核心对象**与**不应该负责**。上一版只有职责与板块,没有这两栏。 + +--- + +## 一、这一版骨架改了什么(三件事) + +**1、把「页壳」显式写进文档,并降级。** +现状里八页各长了一层:一行数据摘要,加一块跳转入口。②段一行没写,`2b:7` 却写着「③段不许新增板块」。③段的做法是不给这两块套统一板块的样式,于是机检的板块计数看不见它们 —— 文档说八页 39 块,屏幕上比这多出十几块。 +继续当它不存在不解决问题。本版把它写成 **§四 页面公共框架**,明确它不算业务板块。这样「骨架冻结」还能立着,③段那层也终于有账。 + +**2、撤掉「功能入口」那一层。** +它的文字就是 `2a`/`2b` 流转表的跳转目标。同一份「谁跳到谁」的事实,在文档里是流转表、在界面上是每页一块入口,两处都会变,而且没有谁是权威。本版把它撤掉,入口回到它该在的地方:挂在**所属业务板块里**,或者像「随手记」那样放在全局可达的位置。撤掉之后,屏幕上少了一层,文档少了一份重复建模。 + +**3、流转写死「带什么过去」。** +上一版的流转表只写「从哪到哪、什么条件下」。条件不落地的后果现状里全有:P2 → P4 不带内容,点过去还是上一条;P1 → P7 传了参数接收方不读,看到的是别的账号。本版每条流转写六个字段,把「带哪个对象、哪个 ID、对面怎么接、接完停在什么状态」写死。 + +--- + +## 二、页型(一句判型 + 依据) + +**本产品是工具型页面,不是营销页。** + +依据:`1a` §一 与 §四 里的用户是天天来干活的 MCN 团队(内容负责人、编导与文案、剪辑与投放),不是第一次来的访客。§八 留下的三个入口全是干活入口,没有一处是「让人下决心」的落地页。 +⇒ ③段不要套落地页骨架。判据:本产品的每一页都有人在里面完成一件事,没有一页是为了让人「看一眼就下决心」而存在的。 + +--- + +## 三、导航结构(三组 + 一个跨组入口) + +**门开在 P1。** 四个组是导航结构,不是四个入口。这是产品的形状:它是一条内容生产闭环,不是八个独立工具。 + +| 组 | 含哪几页 | +|---|---| +| 找选题 | P2 选题雷达、P3 资产库 | +| 走创作流水线 | P4 创作台、P5 发布中心 | +| 看矩阵复盘 | P1 矩阵总览、P7 复盘台、P8 记录与对账 | +| (跨组)账号画像 | P6 —— 从 P1、P4、P5 都能进 | + +组名沿用②段现成的三个(找选题/走创作流水线/看矩阵复盘),⛔ 本版没有换名。理由:这三句话说的是用户要办的事,③段现在的短名(总览/选题/资产/创作/发布/画像/复盘/对账)是另一层的事。恢复分组之后组名和短名怎么对应,是一项结构改动,列入 §十。 + +**账号画像不是第四个业务组,是一项全局上下文能力。** 它不在生产链的任何一环上,每页都可能要用到它。③段落地时可以把它与另外三组在视觉上分开,或放到栏底 —— 怎么放是③段的事(归③段那一列),本份只定它「不属于三个业务组之一」。 + +--- + +## 四、页面公共框架(Page Shell) + +八页每页都有这一层,四样,从上到下: + +1. **页面标题区** —— 页名,加一句话说清这一页干什么。 +2. **数据摘要区**(可选)—— 本页若干个数的一行摘要。哪页有、摘要哪几个数,由本页需要决定;不是每页都必须有。 +3. **页面操作区** —— 本页的页面级操作。 +4. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 + +**三条硬规则**(这是本版新立的,堵的是现状 `A1`/`A3`): + +- 页面公共框架**不计入业务板块数量**,每页的板块清单里不列它。 +- 页面公共框架**不参与功能归属**。功能归属只看核心业务对象(见 `2a-产品功能-新版.md` §一 第 2 条)。 +- 页面公共框架**不占骨架冻结的计数**。冻结冻的是业务板块与对象,不是框架。 + +**一处容易混的地方,写清楚:** P2 的「对标监控概览」在③段里长得和别的页那行数据摘要很像,但它是**业务板块**,不是框架。判据不是「长得像不像」,是「它是不是这一页某个功能的对象」。P2 那四个数是 F1 的产出(在监控的账号数、低粉爆款条数、异常值条数、近三天更新条数),所以它算板块;P1 那行数只是本页概览,不算。形态相似不等于产品对象相同。 + +**全局可达的那一个入口。** 只有「随手记」(F2)放在全局可达的位置:任意页面一次点击内碰得到。它不占任何一页的业务板块位。依据:F2 是 P0,`2a` 与 `1a` §八 都把它当主链的第一跳,不能埋在两层下。 + +--- + +## 五、八页骨架 + +每页写六样:这一页干什么/核心对象/不应该负责/公共框架含什么/业务板块清单(从上到下)/主操作/信息分档。 + +### P1 矩阵总览 + +**这一页干什么**:一屏回答每个账号今天该发什么、发了什么、效果如何。 + +**核心对象**:`Account` 账号、`Performance` 表现数据 +**不应该负责**:内容的深度编辑(那是 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)+ 页面操作区。 +🔴 上一版③段这两块就是「统计条」,本版归入框架,不算板块。它的「功能入口」那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +2. 账号矩阵 —— 每个账号今日该发什么/已发什么/效果如何 + ⛔ 本块**不写怎么呈现**(矩阵、列表都是形态,归③段判) +3. 异常值提示 —— 最近哪些内容的数据异动 +4. 本月表现最好的一条 +5. 全局检索 + +**主操作**:决定今天先处理哪一件事,并进到那一件事。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 账号矩阵 | 主屏常驻 | 删掉它,主操作的对象就没了 —— 不知道有哪些账号,无从决定先处理哪件 | +| 今日待处理 | 主屏常驻 | 删掉它,主操作没有候选可挑,做不成 | +| 异常值提示 | 可点入 | 删掉它,主操作仍做得成(异常值是 P2 的输入,不是这一页的决策依据) | +| 本月表现最好 | 可点入 | 删掉它,主操作完全不受影响 —— 它只是激励 | +| 全局检索 | 可点入 | 删掉它,主操作做得成;它是本页的一个旁路,不是推进动作的一部分 | +| 随手记 | 全局可达(框架层,不占板块) | 它是 F2 的入口,任意页面一次点击内能碰到 | + +🔴 本页依赖 **A1**(账号数 10–50)与**待复核第 5 条**(矩阵级视图是否真需要)。若第 5 条复核为「不需要」,P1 从「矩阵总览」降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换。 + +--- + +### P2 选题雷达 + +**这一页干什么**:找选题,并且把选中的那条推进下一步。 + +**核心对象**:`Benchmark` 对标号、`Topic` 选题 +**不应该负责**:内容生产(那是 P4) + +**页面公共框架**:页面标题区 + 页面操作区 + 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 +🔴 上一版③段的功能入口那块**撤销**。本页**没有**数据摘要区 —— 因为这一页那四个数(对标监控概览)本身就是业务板块,属于 F1 的产出。 + +**业务板块清单(从上到下,5 块)** + +1. 对标监控概览 —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数 +2. 对标内容 —— 每条带它相对该账号平时水平的倍数(⛔ 同 P1,不写呈现) +3. 评论区洞察(可点入子区)—— 取评论、出 AI 候选选题(`2a` F3) +4. 选题库 —— 分「待做/在写/已用」三组 +5. 灵感速记 + +**主操作**:把一条选题推进下一步(去创作台,或去资产库拆解)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 对标内容 | 主屏常驻 | 删掉它,主操作的对象没了,做不成 | +| 选题库 | 主屏常驻 | 删掉它,主操作没有可推进的条目,做不成 | +| 对标监控概览四数 | 主屏常驻 | 删掉它,看不出哪个账号值得看 —— 列表会长到没法挑,等于主操作做不成 | +| 评论区洞察 | 可点入 | 删掉它,仍能从对标列表拿到选题 | +| 灵感速记 | 全局可达(框架层,不占板块) | 同 P1 的随手记 | + +--- + +### P3 资产库 + +**这一页干什么**:把拆解结果存下来,下次能直接拿到。 + +**核心对象**:`Asset` 资产条目 +**不应该负责**:内容流程(拆解完就走,创作在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(条目总数/已入库/待入库/分区数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 分区切换 —— 角度/结构/开场白/标题,一次看一个 +2. 资产条目 —— 当前分区下的条目(⛔ 不写呈现) +3. 单条详情 —— 原文、出处、草稿标记 +4. 引用入口 —— 把这条拿去创作台用 + +**主操作**:把一条拆解结果入库;已入库的则把它引用到创作台。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 分区切换 | 主屏常驻 | 删掉它,四个分区分不开,入库不知道该进哪一区,主操作做不成 | +| 资产条目 | 主屏常驻 | 主操作对象 | +| 单条详情(原文/出处) | 可点入 | 删掉它,入库与引用都还做得成(入库门禁在守卫层,不靠这里显示) | +| 引用入口 | 可点入 | 删掉它,`2a` F4 的主路径改成从创作台来找,多绕一步;但 P3 自己的主操作(入库)不受影响 | + +--- + +### P4 创作台 + +**这一页干什么**:一条内容从选题走到成稿,再从成稿展开成多账号多平台的版本。 + +**核心对象**:`Content` 内容、`ContentVersion` 内容版本 +**不应该负责**:真正执行发布(那是 P5) + +**页面公共框架**:页面标题区 + **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 页面操作区 + 辅助入口区。 +🔴 **「当前内容标识」从板块上移到这里。** 它服务整页,不是某个功能的对象。依据:GPT 的 P4 例(公共框架=当前内容上下文 + 页面级操作),采纳决策 G24。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,6 块)** + +1. 创作流程 —— 七个环节的当前位置,可回退 +2. 当前环节工作区 —— 这一步实际干活的地方 +3. AI 产出与采纳 —— 当前环节的 AI 产出(生成中/已生成/失败重试)+ 采纳·驳回·改后再用 +4. 资产引用 —— 从资产库拿角度、结构、开场白、标题 +5. 版本管理 —— 一稿多版,含母版到多账号多平台的展开 + 🔴 **本块是 F7 与 F8 的落点。** 上一版把 F7 拆成「P4 出成稿、P5 展开」两头各半,P4 侧连发起入口都没有。本版按 `2a` 的归属把它收回这里:展开与逐版确认发生在 P4,P5 只拿去发。 +6. 录制卡片与画板 —— 成稿态之后,把内容转成对着讲的卡片(`2a` F14) + 🔴 **本块是补上的。** 上一版②段 P4 的板块清单里没有它,而 `1a` §五 S3 的场景、`1a` §六 F14、`1e` §四 的映射里都有它(现状 `D3`:四处不一致)。本版按 `2a` F14 归 P4 的结论把它补进板块清单。它是**成稿之后**的动作,不是创作流程七个环节里的一环 —— 这个区分写在这里,免得③段又把它塞进七步里。 + +**主操作**:把当前环节推进到下一环节。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 创作流程 | 主屏常驻 | 删掉它,不知道下一环节是什么,主操作做不成 | +| 当前环节工作区 | 主屏常驻 | 主操作的对象 | +| AI 产出与采纳 | 主屏常驻 | 删掉它,当前环节的产出无处看、无处采纳 ⇒ 推进到下一环节做不成 | +| 当前内容上下文 | 主屏常驻(框架层,不占板块) | 删掉它,改到别的选题上也不知道,等于做错 | +| 资产引用 | 可点入 | 删掉它,仍能凭空写(这正是 S2 要治的老毛病),主操作本身做得成 | +| 版本管理 | 可点入 | 删掉它,推进流程不受影响;只有回溯旧版或多账号展开时才需要 | +| 录制卡片与画板 | 可点入 | 删掉它,走到成稿并发布仍做得成;它只在想生成卡片时才需要 | + +--- + +### P5 发布中心 + +**这一页干什么**:把成稿过来的版本过闸,由人确认发出。 + +**核心对象**:`PublishTask` 发布任务、`PublishRecord` 发布记录 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(目标账号数/目标平台数/本批版本数/硬拦项数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。它上面原本挂着「创作台」与「记录与对账」两个跳转,这两个跳转纳入 §六 的流转契约(P5→P8 见第 14 条,回创作台走流程)。 + +**业务板块清单(从上到下,5 块)** + +1. 目标选择 —— 这批版本发给哪些账号、哪些平台 +2. 各版本与逐版编辑 —— 一个目标一版 +3. 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +4. 确认发布 —— 含二次确认 +5. 发布记录 —— 这批发了什么,可查随发布记录一起留的检查结果 + +**主操作**:确认发布。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 检查结果 | 主屏常驻 | 删掉它,会被硬拦项挡回去却不知道为什么,主操作做不成 | +| 各版本与逐版编辑 | 主屏常驻 | 主操作对象 | +| 确认发布 | 主屏常驻 | 删掉它就没有主操作本身了 | +| 目标选择 | 可点入 | 判据答「做得成」—— 从 P4 带着版本进来时,目标已定;只有从 P1 直接进来才需要现选 | +| 发布记录 | 可点入 | 删掉它,回查改从 P8 进 | + +--- + +### P6 账号画像(跨组入口,不属于三个业务组) + +**这一页干什么**:每个账号一份画像与记忆,看和改都在这一页。 + +**核心对象**:`Account` 账号 +**不应该负责**:独立业务流程(它只提供上下文,不在生产链上) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 账号列表 —— 选一个账号 +2. 画像六维 —— 定位、风格、受众、平台、偏好与红线、长期记忆 +3. 记忆条目 —— 只追加,不覆盖 +4. 关联内容 —— 这个账号做过的内容 + +**主操作**:保存这一份画像。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 画像六维 | 主屏常驻 | 主操作对象 | +| 账号列表 | 主屏常驻 | 删掉它,不知道在改哪个账号的画像,会改错 | +| 记忆条目 | 可点入 | 删掉它,编辑画像与保存都做得成(记忆是回写产物,不是编辑动作的输入) | +| 关联内容 | 可点入 | 删掉它,主操作不受影响 | + +⚠️ **画像六维是一块,不是六块。** 现状里它在界面上被拆成五个输入位加一行只读提示,那是③段的实现选择,不等于它是两个板块。本份只声明它是**一个业务板块**。 + +--- + +### P7 复盘台 + +**这一页干什么**:把一条已发布内容的表现读回来,写成这个账号的经验。 + +**核心对象**:`Review` 复盘结论(原料是 `Performance` 表现数据) +**不应该负责**:财务(那是 P8) + +**页面公共框架**:页面标题区 + 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,6 块)** + +1. 待复盘项 +2. 这一条的表现数据 +3. 归因结论(由 AI 给出,可编辑) +4. 确认与改判 —— 采纳、驳回或改后再用 +5. 回写目标提示 —— 这次回写到哪个账号 +6. 历史复盘(可点入) + +**主操作**:确认归因并回写。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 表现数据 | 主屏常驻 | 删掉它,归因没有依据,主操作做不成 | +| 归因结论(可编辑) | 主屏常驻 | 主操作对象 | +| 确认与改判 | 主屏常驻 | 删掉它,结论没有采纳或驳回 ⇒ 回写没有依据,等于主操作没做成 | +| 待复盘项 | 主屏常驻 | 删掉它,不知道有什么可复盘,主操作做不成 | +| 回写目标提示 | 主屏常驻 | 删掉它,回写会落到错的账号,这条经验就废了 —— 等于主操作没做成 | +| 历史复盘 | 可点入 | 删掉它,当前这次复盘仍做得成 | + +**一句要写死的话**:第 4 块「确认与改判」**是回写的前置开关**,不是只留痕。没有人工裁决,回写这一步不成立。依据 `2a` F10 的状态流转;③段现在按「只留痕」实现(现状 `D2`),要改。 + +--- + +### P8 记录与对账 + +**这一页干什么**:查发布留痕,核商单与收支对不对得上。 + +**核心对象**:`PublishRecord` 发布记录、`Campaign/Order` 商单与收支 +**不应该负责**:内容创作 + +**页面公共框架**:页面标题区 + 数据摘要区(记录总数/已发布数/待结算数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 发布记录 —— 谁在什么时候确认发的、发的是哪一版(⛔ 不写呈现) +2. 单条溯源 —— 从记录回到内容与版本 +3. 对账核对区 —— 内容、发布记录、收支三样对得上 +4. 商单与收支(可点入,所属功能 F12 标 `P2/Deferred`,第一版可能没有) + +**主操作**:核销一条记录。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 发布记录 | 主屏常驻 | 知道有哪些记录,不知道就无从核销。判据:删掉它,主操作没有对象 | +| 对账核对区 | 主屏常驻 | 主操作对象 | +| 单条溯源 | 可点入 | 判据答「做得成」—— 核销看列表就够;要深究才点进溯源 | +| 商单与收支 | 可点入 | 删掉它,主操作仍做得成;且 F12 标 `Deferred`,第一版可能整块没有(见 `2a` §三 F12 与 §六 依赖表) | + +--- + +## 六、页面流转契约(20 条) + +**每条写六样**:来源页面/触发动作/传递对象/对象 ID(含必要上下文)/目标页面接收方式/目标页面落地状态。 + +**每条至少带一个业务对象或它的 ID。** 光写「从哪到哪」没有工程价值 —— 上一版 18 条里 14 条就是这么写的,现状里它们要么不带东西、要么带了过去对面不读。 + +**三条总规则**(与 `2a` §一 第 3 条同源,此处是它在骨架上的落地):跨页只传 ID 加必要上下文,不传页面临时状态;一个对象只有一处产生;目标页接到 ID 必须能自己恢复出状态。 + +### 第一类 · 对象传递(上游产出对象,下游拿它新建或更新) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 7 | P2 → P3 | 对某条对标内容发起拆解 | 对标内容 → `Asset` 的原料 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 | 分区切到对应区,详情显示该内容的原文与出处 | +| 8 | P2 → P4 | 把一条选题转入创作 | `Topic` → `Content` | `topicId` | P4 **创建或切换当前 `Content`** | 当前内容=该选题;新建草稿 v1;标题继承选题标题;资产引用为空 | +| 9 | P3 → P4 | 引用一条资产去创作 | `Asset` → 当前内容的资产引用 | `assetId` | P4 把该资产挂进当前内容的资产引用 | 资产引用区列出该条 | +| 10 | P4 → P5 | 成稿态,去发布 | `ContentVersion` → `PublishTask` | `contentId` + `versionIds` | P5 创建发布任务 | 各版本按 `versionIds` 载入,检查结果待跑 | + +🔴 第 8 条治的是现状 `B8`:上一版只写「把一条选题转入创作」,③段于是只改了选题状态就跳页,创作台显示的还是写死的上一条。契约写死「创建或切换当前 `Content`」,对面就没法糊弄。 + +### 第二类 · 上下文定位(只带定位用的 ID,目标页自己去查) + +| # | 来源 → 目标 | 触发 | 传递对象(定位用) | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 1 | P1 → P2 | 点「异常值提示」里某条,或从今日待处理挑到选题类待办 | `Benchmark` 的线索 | `benchmarkId` + `filter=异常值` | P2 用 `filter` 筛对标内容,用 `benchmarkId` 定位那一条 | 列表已按筛选值过滤,停在对应那条 | +| 2 | P1 → P4 | 今日待处理里有「在写」的内容 | `Content` | `contentId` | P4 切换当前内容 | 创作流程停在该内容当前环节 | +| 3 | P1 → P5 | 今日待处理里有待审/待确认的 | `PublishTask` | `publishTaskId` | P5 载入该任务 | 停在该任务的检查与确认位 | +| 4 | P1 → P6 | 点账号矩阵里某个账号 | `Account` | `accountId` | P6 载入该账号 | 画像六维填充该账号的值 | +| 5 | P1 → P7 | 今日待处理里有待复盘的 | `Review` | `accountId`(如有 `reviewId` 一并带) | **P7 自己按 `accountId` 查出该账号的待复盘项与表现数据** | 待复盘项定位于该账号 | +| 6 | P1 → P8 | 今日待处理里有待核销的 | `PublishRecord` | `recordId` | P8 载入该条记录 | 对账核对区停在该条记录 | +| 11 | P4 → P6 | 需要查这个账号的口径 | `Account` | `accountId` | P6 载入该账号 | 画像六维填充该账号的值 | +| 12 | P5 → P6 | 发布前要核账号口径 | `Account` | `accountId` | 同第 11 条 | 同第 11 条 | +| 15 | P6 → P4 | 画像保存后回到创作 | `Account`(回程) | `accountId`,如来时带了 `contentId` 一并带回 | P4 保持或切换当前内容 | 来时带了 `contentId` 则回到它,否则当前内容不变 | +| 16 | P6 → P5 | 画像保存后回到发布 | `Account`(回程) | `accountId`,如来时带了 `publishTaskId` 一并带回 | P5 保持当前任务 | 任务不变 | +| 18 | P8 → P5 | 从一条记录回到它对应的版本 | `PublishRecord` → `ContentVersion` | `recordId`(由它解析出 `versionIds`) | P5 载入这些版本 | 各版本定位于该记录当时用的那一版 | + +🔴 第 5 条治的是现状 `B9`:上一版写「点账号矩阵里的某个账号 → P7」,③段把被点账号放进了页面临时状态,而 P7 根本不读它,看的是待复盘表默认那一条。契约写死「传 `accountId`,P7 自己查」,就把这条路堵上了。 + +### 第三类 · 状态完成(下游这一步做完,上游那个对象的状态才算走完) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 13 | P5 → P7 | 已发布,去复盘 | `PublishRecord` → `Review` | `recordId` + `accountId` | P7 为该记录建一条待复盘项 | 待复盘项多出这一条,表现数据取该记录用的版本 | +| 14 | P5 → P8 | 发布后去查留痕 | `PublishTask` → `PublishRecord` | `publishTaskId` | P8 载入刚产生的那条记录 | 发布记录列表多出这一条并停在它上面 | +| 17 | P7 → P6 | 归因回写 | `Review` → `Account` 的记忆 | `accountId` + `reviewId` | P6 往该账号追加一条记忆条目 | 记忆条目多出一条,长期记忆数 +1 | + +🔴 第 13 条治的是现状 `C1`:上一版写的 P5 → P7,是 18 条里唯一一条界面上找不到任何入口的。本版把它列进 P0 必须通的四条之一(见下)。 +🔴 第 14 条治的是现状 `B1`:③段「确认发布」只写了个内存标志加一句提示,P8 的记录表永远不会多出这一条。契约写死「目标页载入刚产生的那条记录」,对面就得真落一条。 + +### 两条新增的流转(标「新增·待确认」,见 §十) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 19 | P7 → P1 | 复盘结论确认后,回到矩阵 | `Review` → 由它刷新的 `Performance` 汇总 | `accountId`(可选) | P1 用该结论刷新异常值提示/今日待处理/本月表现最好的一条 | 对应板块多出这一条 | +| 20 | P7 → P2 | 复盘发现转下一轮选题 | `Review` → `Topic` | `reviewId` | P2 以该结论为来源建一条草稿选题 | 选题库「待做」多出一条,来源标该复盘 | + +**为什么这两条单列**:第①棒逐条盘点的 18 条里没有它们,它们是 GPT 新加的,代表「复盘反哺」那一段闭环。不写进去,闭环在文档上就是断的,第④步做界面对不上;写进去却不标,等于偷偷扩范围。所以:写进去,标出来。 + +### 优先级:哪几条必须先通 + +主链的第一段是 `Topic → Content → ContentVersion → PublishTask → PublishRecord → Review`。落在流转上,**P0 必须先通的是四条**: + +1. 第 8 条 P2 → P4(选题 → 内容) +2. 第 10 条 P4 → P5(成稿 → 发布任务) +3. 第 14 条 P5 → P8(发布 → 发布记录) +4. 第 13 条 P5 → P7(发布记录 → 待复盘) + +后做的(重要,但不卡主生产链):第 1、2、3、4、5、6、9、11、12、15、16、18 条。第 19、20 条等 §十 第 3 项定完再排。 + +--- + +## 七、骨架受限的两处(依赖未复核项,沿用) + +1. **P1 的形态挂在待复核第 5 条上**(矩阵级视图是否真需要)。若答「不需要」,P1 降为单账号今日,矩阵列表下移。这是一处**结构性分支**,③段动工前必须定。 +2. **P8 的第 4 板块挂在待复核第 6 条与 A3 上**(商单对账进不进第一版;收支口径)。若「不进第一版」,P8 只留第 1、2、3 板块。 + +**回收三字段**:复核人 = 主会话转用户;复核时机 = ②段收口时一次性过,③段动工前必须定;结论落点 = 本文件 §七 与 §五 P1、P8 对应板块。 + +--- + +## 八、五样给全核对(方法论要求,缺一样③段就没方向) + +| 要求 | 本份落在哪 | 齐 | +|---|---|---| +| 页面清单(有哪几页,每页一句话说清干什么) | §五 八页,每页第一段 | ✅ | +| 页面流转(谁跳到谁、什么条件下) | §六 20 条,每条六要素 + 三条总规则 + P0 四条 | ✅ | +| 每页板块清单与排列(几个块、从上到下什么顺序) | §五 每页「业务板块清单(从上到下)」,逐页编号 | ✅ | +| 每页主操作(唯一那个推进动作) | §五 每页「主操作」 | ✅ | +| 每条信息的分档(主屏常驻/可点入,含判据回答) | §五 每页「信息分档」表 | ✅ | +| 页型一句 | §二 | ✅ | +| 导航结构(几组、各含哪几页、门开在哪) | §三 | ✅ | + +--- + +## 九、与上一版的实质差别(逐条) + +**结构层** + +1、**新增「页面公共框架」一节(§四)**,给出四样内容与三条硬规则。上一版完全没有这一层,③段的页壳因此成了文档外的黑户(现状 `A1`)。 +2、**撤销各页的「功能入口」板块**(上一版③段长出来、②段没写的那一层)。撤销之后入口回到所属业务板块或全局可达位置。依据:它的文字就是流转表的副本(现状 `A2`)。 +3、**骨架冻结升级成对象冻结**(§四+§七)。上一版只写「③段不许新增、移动、删除板块」,没定义「什么算板块」;本版把判据从「有没有套统一板块的样式」换成「有没有一个明确的业务对象」,并写明新增业务能力必须先进 `2a` 功能清单、完成对象归属。 +4、**导航从「一层八项平铺」回到三组+一个跨组入口(§三)**。上一版写的是三组加跨组,但③段做成了八项平铺、文档没跟着改(现状 `D3`)。本版明确组名沿用②段现成的三个,⛔ 没有顺手改名。 +5、**每页新增两栏:核心对象、不应该负责**。上一版只有「职责+板块」。 +6、**流转从「一句话」改成六要素契约(§六)**,20 条逐条写全,并按对象传递/上下文定位/状态完成三类分开。上一版只有「从哪到哪、什么条件下」两列。 +7、**新增流转优先级:P0 四条**(§六末)。 + +**页面与板块层** + +8、**P4:「当前内容标识」从业务板块上移进公共框架**,改名「当前内容上下文」。 +9、**P4:新增板块「录制卡片与画板」**,落 F14。上一版 P4 板块清单里没有它(现状 `D3` 四处不一致)。 +10、**P4:新增板块「版本管理」承担 F7 与 F8**。上一版把 F7 拆到 P4/P5 两头、P4 侧只有一张跳转入口,本版收回 P4。 +11、**P5:第 2 板块改名「各版本与逐版编辑」**(原「各版本预览与逐版编辑」)。它现在只消费 P4 生成的版本,⛔ 不再负责展开。 +12、**P5:第 5 板块从「发布记录入口」改成「发布记录」**。记录在 P5 产生,就在 P5 能看;P8 是跨页查那一条。 +13、**P6:写死「画像六维是一块,不是六块」**。上一版没写这一句,③段在界面上把它拆成了五个输入位加一行只读提示。 +14、**P7:写死「确认与改判是回写的前置开关」**。上一版没写清,③段按「只留痕」实现(现状 `D2`)。 +15、**P1:第 5 板块从「全局检索与随手记入口」改成「全局检索」**,随手记移到公共框架的全局可达位置(它本来就在上一版的信息分档里被标成全局可达)。 + +**数字与核对层** + +16、**业务板块总数=39 块**,与上一版同为 39(一块上移公共框架,一块补进来)。🔴 顺带订正一处:第①棒 §四 A1 写「文档说八页共 38 个板块」,而它自己给的加总 `5+5+4+6+5+4+6+4` 等于 **39** —— 那句 38 是加总差错,不是文档原值。本版据该清单重数,得 39。 +17、**零视觉词红线照旧**,本版全文没有配色 / 字体 / 间距 / 组件样式 / 动效,也没用「卡片」「按钮」「标签」这类具体形态词。 +18、**八页一页没删,主操作一页没改。** 这两条是上一版对的地方,本版没动。 + +--- + +## 十、待与用户确认项 + +派活单要求:「部分采纳」那三条涉及改②段结构的,先按 GPT 的方向落地,再在文末单列。以下是本份范围内的全部待确认项。 + +**1、导航组名与侧栏短名怎么对应** +本版恢复了三组的**结构**(找选题/走创作流水线/看矩阵复盘 + 跨组账号画像),但**没换组名**。GPT 建议改成「① 选题与洞察/② 创作与发布/③ 矩阵与增长」并加序号,这条**没采纳**。 +为什么不自决:换名等于顺手改口径;而且③段侧栏的短名是硬定的两个字(总览/选题/资产/创作/发布/画像/复盘/对账),恢复分组后组名与短名怎么对应,是一项结构改动,得先问。 + +**2、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 主张合成一份、九节。本版的处置是**内容照收、形态不收**:九节要的东西全部落进了 `2a`+`2b` 两份(详见 `2a-产品功能-新版.md` §九 第 1 项)。 +为什么不自决:合成会新增文档层,属于扩大可见面。 + +**3、两条新增流转(§六 第 19、20 条)要不要进②段** +写进去了,但每条都标了「新增·待确认」。理由与处置见 §六 那一段。 +为什么不自决:新增流转是扩范围。 + +**4、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳**三分类**,六型没进正文。 +为什么不自决:GPT 没把六型和这 20 条逐条对齐,直接搬进来会在同一件事上造出第二份定义。要进得先把 20 条逐条归型。 + +**5、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。P1 的形态挂在第 5 条上,P8 第 4 板块挂在第 6 条与 A3 上(§七)。 + +**6、一条计数订正请顺手认一下** +§九 第 16 条:第①棒写「八页共 38 个板块」,实际加总是 39。本版重数为 39。这条不是要用户拍板,只是请核一下按哪个数往下走。 + +**回收三字段**(本份全部待确认项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3、4 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §十 与 `2a-产品功能-新版.md` §九 + +--- + +## 附:本份自检 + +- [x] 八页,每页有核心对象、不应该负责、公共框架含什么、业务板块清单与顺序、主操作、信息分档(含判据回答) +- [x] 页面公共框架被显式定义,且写明不算板块数、不参与功能归属、不占冻结计数 +- [x] 每页的业务板块清单里没有公共框架那四样(框架与板块彻底分开) +- [x] 流转 20 条,每条六要素齐全;18 条沿用②段原条目,2 条新增并标注 +- [x] 流转按三类分开;P0 四条单列 +- [x] ③段现在实现不了的四处(`B1`/`B8`/`B9`/`C1`)在契约里都有对应写法 +- [x] 零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现;未用「卡片」「按钮」「标签」这类形态词 +- [x] 未写功能条目的有无与优先级(那是 `2a`),未描述页面「长什么样」 +- [x] 业务板块总数写明(39 块),并订正了第①棒的一处加总差错 +- [x] 骨架受限的两处标出来源(待复核第 5、6 条与 A3),带回收三字段 +- [x] 对象冻结声明写明确:新增业务能力必须先进 `2a` 功能清单并完成对象归属 +- [x] §九 逐条列出与上一版的实质差别(18 条) +- [x] §十 单列了三条「部分采纳」的处置与理由 +- [x] 未新增②段两份之外的文档;上游文件全部只读使用 + +*(说人话自评:45/50 直接性 9 / 节奏 8 / 信任度 9 / 真实性 10 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fa6e07.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fa6e07.md new file mode 100644 index 0000000..3c22277 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fa6e07.md @@ -0,0 +1,618 @@ +# 2b 界面布局(新版 V4) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 2 子步,产出 `prd/2b-界面布局.md` +> 本版在 V3 基础上**把用户 2026-10-09~10 的八条口径落到骨架与板块上**(选题库分类、资产入库不限页、投放页两级目标选择、账号页拆「画像五维 + 平台账号」、复盘页写死平铺)。 +> V3 本身是在 V2 基础上按用户口径改导航与页面归属(导航一层七项、P8 并入复盘、功能与板块一一对应)。 +> 上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)与 V2/V3 稿。V4 的口径原文:`用户口径裁决-5条回应.md`(2026-10-09)、`用户口径追加-账号是两个概念.md`(2026-10-10)。 +> 只读输入:①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、②棒 GPT 意见与采纳决策、V2 版 `2b-界面布局-新版.md`、①段 `1a-需求文档.md` 与 `1e-使用场景.md`。 +> 判据源:`stage-requirements/SKILL.md` §2b + `assets/diagram-design/`(本份只给灰块骨架,不出图)。 +> 本份专管界面骨架:有哪几页、每页几个板块、板块怎么排、跨页带什么过去。⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能-新版.md`)。 +> ⛔ **全文零视觉词** —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。本份只说「有哪些块、什么顺序、点它带什么过去」。 + +--- + +## 〇、一屏结论 + +- **页数、导航、流转条数都不动**:仍是七页、一层七项导航、20 条流转契约。**V4 改的是页内的板块构成与四页的板块文案**。 +- 🔴 **业务板块总数不变,仍是 39**:P2 由 5 块收成 4 块(「灵感速记」并进「选题库」,随手记的落点本来就是选题库),P6 由 4 块变 5 块(新增「平台账号」)⇒ 一减一加,**净变化 0**。逐页数见 §五 与 §九。 +- **P2 选题库**:容纳范围放宽成「对选题有帮助的任何信息」,分类用**进度 × 类型**两个正交维度(进度沿用 `待做/在写/已用`;类型是新加的 `选题/对标线索/评论洞察/数据异动/灵感`,各有各的后续动作)。⛔ 不新增「待整理」状态。 +- **P2 对标内容**:拆解结果**可就地入库**(资产库页是统一管理的地方,⛔ 不是唯一入库口)。 +- **P3 资产库**:页面职责由「存拆解结果」改成「**统一管理**资产条目」;⛔ 它不再是唯一入库口。 +- **P5 发布中心**:目标选择改成**两级** —— 先选内容账号,再勾它下面的**平台账号**(渠道)。数据摘要区跟着对齐成「目标渠道数/覆盖平台数」。 +- **P6 账号画像**:板块 2 由「画像六维」改成「**画像五维**」(去掉「平台」这一维);新增板块「**平台账号**」(带平台 + 登录态 + 授权状态)。 +- **P7 复盘台**:10 块**保持平铺、⛔ 不划子区**,并写死它属「**发布之后看数据与看收入**」这一类事。 +- 其余骨架照 V3:页面公共框架(Page Shell)不算板块;每页两栏「核心对象」「不应该负责」保留;「功能 ↔ 板块」仍可机检(原型 `FN_HOME`/`FN_MAP`)。 + +--- + +## 一、这一版骨架改了什么(五件事) + +**1、P6 增加一块「平台账号」,画像那一块由六维收成五维。**(P6 4 → 5 块) +账号按用户口径拆成两个概念:**内容账号**管内容属性(账号设定),**平台账号**是发布渠道。⇒ 「画像六维」去掉「平台」这一维,改成「**画像五维**」(定位/风格/受众/偏好与红线/长期记忆);平台账号单独成一块,列出一个内容账号下面的 N 个平台账号,每条带「平台 + 登录态 + 授权状态」。 +🔴 判据:平台账号自带三个属性和自己的动作(登录/授权/增删),不是画像里的一行值 ⇒ 它够一个板块;而它的核心对象仍是 `Account`,所以**归属页没变**(`2a` §三 F9)。 + +**2、P2 的「灵感速记」并进「选题库」,选题库按两个维度分类。**(P2 5 → 4 块) +用户口径:「选题库里面可以是对选题有帮助的任何信息 分类区分就好」+「随手记仍落选题库」。⇒ 随手记的落点本来就是选题库,⛔ 不必再单列一块。选题库仍是那一个板块,里面用**进度 × 类型**两个正交维度区分:进度沿用 `待做/在写/已用`;类型是新加的 `选题/对标线索/评论洞察/数据异动/灵感`,每类自带后续动作。⛔ 不新增「待整理」状态、⛔ 不做多去向选择。 +🔴 这一条**顺手订正了 V3 遗留的第 4 条**(P2 的板块清单把「灵感速记」列为第 5 块,同页信息分档表又把它标成「全局可达、不占板块」—— 两处打架)⇒ 现在板块清单与分档表一致:**随手记是全局可达的框架层入口(不占板块),它写进来的东西落选题库**。 + +**净计数**:P2 −1、P6 +1 ⇒ **总数仍是 39**。 + +**3、资产入库不限页,资产库页是统一管理的地方。** +用户口径:「所有页面有产生资产都可以 随时入库,资产库页是统一管理的地方」。⇒ P3 的页面职责与主操作由「存拆解结果」改成「**统一管理**」;P2 的「对标内容」块写清拆出来的结果可以**就地入库**(人不必先跑去资产库)。⛔ 资产库页**不再是唯一的入库口**。 +⚠️ 这与「一个对象只有一处产生」不冲突 —— 那一条管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页(`2a` §一 第 4 条)。 + +**4、P5 目标选择改成两级,数据摘要区跟着对齐。** +用户口径:一个内容账号在投放时对应**多个平台账号**、分别投放。⇒ 目标选择先选**内容账号**,再勾它下面的**平台账号**(渠道);摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」。「各版本与逐版编辑」写明**一个平台账号一版**(一版一路)。 + +**5、P7 写死「平铺、不分区」。** +用户口径:「发布的目的就是为了看数据和看收入啊」⇒ 复盘(看数据)与记录对账(看收入)是**同一类事**。本页 10 块**平铺**,⛔ 不划子区、⛔ 不再拆页、⛔ 不加导航项。 + +### 附:V3 那一版骨架改了什么(存档,⛔ 本版未推翻) + +**1、P8 整页并进 P7。** +用户口径逐字:「**P8 放复盘**」「**当然是功能也要放过去**」。P8 记录与对账不再是一页 —— 它的四个板块原样接在 P7 的板块清单后面,导航里也不再单列。判据不是「把 P8 改名」,是**页集合里从此没有 P8**。 + +**2、导航压平成一层的七项。** +用户口径逐字:「**左侧导航应该是 首页 选题 创作 投放 复盘 账号**」「**P3 放导航 排最后**」。V2 里的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组分隔**一起撤掉**;项仍是七项、一项一页,顺序照用户给的先后,资产排最后。 + +**3、功能与板块的对应关系写进可机检的位置。** +用户口径逐字:「**所有功能要和各自板块对应**」。本版把「哪条功能归哪一页的哪些板块」写成一张表(原型里的 `FN_MAP`),归属页写成另一张(`FN_HOME`,逐字取 `2a` §四)。自检两端一起查:功能不得悬空、板块不得孤立、每条功能的每个归属页上都得有它的板块。 + +**4、三处指向 P8 的流转改指 P7。** +流转契约本身(六要素、20 条)不动,只把目标页由 P8 换成 P7:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)、第 18 条(记录 → P5)。第 13 条(P5 → 复盘)本来就指向 P7,不变。 + +--- + +## 二、页型(一句判型 + 依据) + +**本产品是工具型页面,不是营销页。** + +依据:`1a` §一 与 §四 里的用户是天天来干活的 MCN 团队(内容负责人、编导与文案、剪辑与投放),不是第一次来的访客。§八 留下的三个入口全是干活入口,没有一处是「让人下决心」的落地页。 +⇒ ③段不要套落地页骨架。判据:本产品的每一页都有人在里面完成一件事,没有一页是为了让人「看一眼就下决心」而存在的。 + +--- + +## 三、导航结构(一层七项) + +**门开在 P1(导航里叫「首页」)。** 导航是**一层七项** —— ⛔ 没有分组、⛔ 没有跨组分隔、⛔ 没有第二层。 + +| 导航项 | 落哪一页 | +|---|---| +| 首页 | P1 矩阵总览 | +| 选题 | P2 选题雷达 | +| 创作 | P4 创作台 | +| 投放 | P5 发布中心 | +| 复盘 | P7 复盘台(P8 已并入,见 §五) | +| 账号 | P6 账号画像 | +| 资产 | P3 资产库(排最后) | + +**项名与页名是两层,别混。** 导航里的名字照用户口径;页面自己的名字沿用不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。两处对照就是上表 —— 最要紧的一处是 **P5:导航叫「投放」,页面仍叫「发布中心」**,这一页只管内容发布与排期,版本生成在创作台,⛔ 没有扩功能。 + +**顺序是硬约束。** 资产排最后(用户明说);其余六项按用户给的先后(首页 → 选题 → 创作 → 投放 → 复盘 → 账号)。 + +**账号为什么不再标「跨组」。** V2 把它标成跨组,是因为那时有三组可比。三组撤掉之后「跨组」这个标记失去参照物,本版一并去掉;P6 仍是全局上下文能力(不在生产链任何一环上),这一点没变。 + + +--- + +## 四、页面公共框架(Page Shell) + +七页每页都有这一层,四样,从上到下: + +1. **页面标题区** —— 页名,加一句话说清这一页干什么。 +2. **数据摘要区**(可选)—— 本页若干个数的一行摘要。哪页有、摘要哪几个数,由本页需要决定;不是每页都必须有。 +3. **页面操作区** —— 本页的页面级操作。 +4. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 + +**三条硬规则**(这是本版新立的,堵的是现状 `A1`/`A3`): + +- 页面公共框架**不计入业务板块数量**,每页的板块清单里不列它。 +- 页面公共框架**不参与功能归属**。功能归属只看核心业务对象(见 `2a-产品功能-新版.md` §一 第 2 条)。 +- 页面公共框架**不占骨架冻结的计数**。冻结冻的是业务板块与对象,不是框架。 + +**一处容易混的地方,写清楚:** P2 的「对标监控概览」在③段里长得和别的页那行数据摘要很像,但它是**业务板块**,不是框架。判据不是「长得像不像」,是「它是不是这一页某个功能的对象」。P2 那四个数是 F1 的产出(在监控的账号数、低粉爆款条数、异常值条数、近三天更新条数),所以它算板块;P1 那行数只是本页概览,不算。形态相似不等于产品对象相同。 + +**全局可达的那一个入口。** 只有「随手记」(F2)放在全局可达的位置:任意页面一次点击内碰得到。它不占任何一页的业务板块位。依据:F2 是 P0,`2a` 与 `1a` §八 都把它当主链的第一跳,不能埋在两层下。 + +--- + +## 五、七页骨架 + +每页写七样:这一页干什么/核心对象/不应该负责/公共框架含什么/业务板块清单(从上到下)/主操作/信息分档。 + +### P1 矩阵总览 + +**这一页干什么**:一屏回答每个账号今天该发什么、发了什么、效果如何。 + +**核心对象**:`Account` 账号、`Performance` 表现数据 +**不应该负责**:内容的深度编辑(那是 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)+ 页面操作区。 +🔴 上一版③段这两块就是「统计条」,本版归入框架,不算板块。它的「功能入口」那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +2. 账号矩阵 —— 每个账号今日该发什么/已发什么/效果如何 + ⛔ 本块**不写怎么呈现**(矩阵、列表都是形态,归③段判) +3. 异常值提示 —— 最近哪些内容的数据异动 +4. 本月表现最好的一条 +5. 全局检索 + +**主操作**:决定今天先处理哪一件事,并进到那一件事。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 账号矩阵 | 主屏常驻 | 删掉它,主操作的对象就没了 —— 不知道有哪些账号,无从决定先处理哪件 | +| 今日待处理 | 主屏常驻 | 删掉它,主操作没有候选可挑,做不成 | +| 异常值提示 | 可点入 | 删掉它,主操作仍做得成(异常值是 P2 的输入,不是这一页的决策依据) | +| 本月表现最好 | 可点入 | 删掉它,主操作完全不受影响 —— 它只是激励 | +| 全局检索 | 可点入 | 删掉它,主操作做得成;它是本页的一个旁路,不是推进动作的一部分 | +| 随手记 | 全局可达(框架层,不占板块) | 它是 F2 的入口,任意页面一次点击内能碰到 | + +🔴 本页依赖 **A1**(账号数 10–50)与**待复核第 5 条**(矩阵级视图是否真需要)。若第 5 条复核为「不需要」,P1 从「矩阵总览」降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换。 + +--- + +### P2 选题雷达 + +**这一页干什么**:找选题,并且把选中的那条推进下一步。 + +**核心对象**:`Benchmark` 对标号、`Topic` 选题 +**不应该负责**:内容生产(那是 P4) + +**页面公共框架**:页面标题区 + 页面操作区 + 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 +🔴 上一版③段的功能入口那块**撤销**。本页**没有**数据摘要区 —— 因为这一页那四个数(对标监控概览)本身就是业务板块,属于 F1 的产出。 + +**业务板块清单(从上到下,4 块)** + +1. 对标监控概览 —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数 +2. 对标内容 —— 每条带它相对该账号平时水平的倍数(⛔ 同 P1,不写呈现);拆出来的结果**可就地入库**(人不必先跑去资产库 —— 入库口不限页,见 §一 第 3 条) +3. 评论区洞察(可点入子区)—— 取评论、出 AI 候选选题(`2a` F3) +4. 选题库 —— 装**对选题有帮助的任何信息**,用**进度 × 类型**两个正交维度区分(见下) + +**选题库的两个维度(本版新写清)** + +- **进度**(沿用旧口径):`待做` / `在写` / `已用`。 +- **类型**(本版新加):`选题` / `对标线索` / `评论洞察` / `数据异动` / `灵感`。每类自带后续动作 —— 选题往下推创作、对标线索去拆解、评论洞察回评论区、数据异动去对标的那个账号、灵感可以直接变成选题。 +- 两个维度**正交**:一条信息同时带进度和类型,⛔ 不是二选一。随手记写进来的信息,默认落「**灵感**」这个类型、进度默认「**待做**」。 +- ⛔ 不新增「**待整理**」状态,⛔ 不做「先选去向」这一步 —— 信息落进来就是待做,靠类型区分,不靠人先归档。 + +**主操作**:把一条选题推进下一步(去创作台,或去资产库拆解)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 对标内容 | 主屏常驻 | 删掉它,主操作的对象没了,做不成 | +| 选题库 | 主屏常驻 | 删掉它,主操作没有可推进的条目,做不成 | +| 对标监控概览四数 | 主屏常驻 | 删掉它,看不出哪个账号值得看 —— 列表会长到没法挑,等于主操作做不成 | +| 评论区洞察 | 可点入 | 删掉它,仍能从对标列表拿到选题 | +| 随手记(写进选题库) | 全局可达(框架层,不占板块) | 同 P1 的随手记;它写进来的东西落进「选题库」板块 | + +--- + +### P3 资产库 + +**这一页干什么**:**统一管理**资产条目 —— 归类、查改、引用。资产从哪来不限页:任何页产生资产都可以就地入库,这一页是把资产收拢起来统一管的地方。 + +**核心对象**:`Asset` 资产条目 +**不应该负责**:内容流程(拆解完就走,创作在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(条目总数/已入库/待入库/分区数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 分区切换 —— 角度/结构/开场白/标题,一次看一个 +2. 资产条目 —— 当前分区下的条目(⛔ 不写呈现) +3. 单条详情 —— 原文、出处、草稿标记 +4. 引用入口 —— 把这条拿去创作台用 + +**主操作**:把一条资产条目管理到位(归好分区、补上出处),需要时引用到创作台。 +🔴 本页**不是唯一的入库口** —— P2 拆解、P4 创作、P3 自己都能就地入库;这一页的职责是**统一管理**,⛔ 不是「必须先到这里才能入库」。这与「一个对象只有一处产生」不冲突:那一条管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页(`2a` §一 第 4 条)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 分区切换 | 主屏常驻 | 删掉它,四个分区分不开,入库不知道该进哪一区,主操作做不成 | +| 资产条目 | 主屏常驻 | 主操作对象 | +| 单条详情(原文/出处) | 可点入 | 删掉它,入库与引用都还做得成(入库门禁在守卫层,不靠这里显示) | +| 引用入口 | 可点入 | 删掉它,`2a` F4 的主路径改成从创作台来找,多绕一步;但 P3 自己的主操作(入库)不受影响 | + +--- + +### P4 创作台 + +**这一页干什么**:一条内容从选题走到成稿,再从成稿展开成**多个平台账号**的版本。 + +**核心对象**:`Content` 内容、`ContentVersion` 内容版本 +**不应该负责**:真正执行发布(那是 P5) + +**页面公共框架**:页面标题区 + **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 页面操作区 + 辅助入口区。 +🔴 **「当前内容标识」从板块上移到这里。** 它服务整页,不是某个功能的对象。依据:GPT 的 P4 例(公共框架=当前内容上下文 + 页面级操作),采纳决策 G24。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,6 块)** + +1. 创作流程 —— 七个环节的当前位置,可回退 +2. 当前环节工作区 —— 这一步实际干活的地方 +3. AI 产出与采纳 —— 当前环节的 AI 产出(生成中/已生成/失败重试)+ 采纳·驳回·改后再用 +4. 资产引用 —— 从资产库拿角度、结构、开场白、标题 +5. 版本管理 —— 一稿多版,含母版到**多个平台账号**的展开(展开单位是**平台账号**:一个内容账号下的一个平台账号一版) + 🔴 **本块是 F7 与 F8 的落点。** 上一版把 F7 拆成「P4 出成稿、P5 展开」两头各半,P4 侧连发起入口都没有。本版按 `2a` 的归属把它收回这里:展开与逐版确认发生在 P4,P5 只拿去发。展开单位由 V3 的「账号 × 平台」改成**平台账号**(`2a` F7)。 +6. 录制卡片与画板 —— 成稿态之后,把内容转成对着讲的卡片(`2a` F14) + 🔴 **本块是补上的。** 上一版②段 P4 的板块清单里没有它,而 `1a` §五 S3 的场景、`1a` §六 F14、`1e` §四 的映射里都有它(现状 `D3`:四处不一致)。本版按 `2a` F14 归 P4 的结论把它补进板块清单。它是**成稿之后**的动作,不是创作流程七个环节里的一环 —— 这个区分写在这里,免得③段又把它塞进七步里。 + +**主操作**:把当前环节推进到下一环节。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 创作流程 | 主屏常驻 | 删掉它,不知道下一环节是什么,主操作做不成 | +| 当前环节工作区 | 主屏常驻 | 主操作的对象 | +| AI 产出与采纳 | 主屏常驻 | 删掉它,当前环节的产出无处看、无处采纳 ⇒ 推进到下一环节做不成 | +| 当前内容上下文 | 主屏常驻(框架层,不占板块) | 删掉它,改到别的选题上也不知道,等于做错 | +| 资产引用 | 可点入 | 删掉它,仍能凭空写(这正是 S2 要治的老毛病),主操作本身做得成 | +| 版本管理 | 可点入 | 删掉它,推进流程不受影响;只有回溯旧版或多账号展开时才需要 | +| 录制卡片与画板 | 可点入 | 删掉它,走到成稿并发布仍做得成;它只在想生成卡片时才需要 | + +--- + +### P5 发布中心 + +**这一页干什么**:把成稿过来的版本过闸,由人确认发出。 + +**核心对象**:`PublishTask` 发布任务、`PublishRecord` 发布记录 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(目标渠道数/覆盖平台数/本批版本数/硬拦项数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。它上面原本挂着「创作台」与「记录与对账」两个跳转,这两个跳转纳入 §六 的流转契约(P5→P7 见第 14 条,回创作台走流程)。 + +**业务板块清单(从上到下,5 块)** + +1. 目标选择 —— **两级**:先选**内容账号**,再勾它下面的**平台账号**(渠道),决定这批版本投到哪几个渠道 +2. 各版本与逐版编辑 —— **一个平台账号一版**(一版一路) +3. 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +4. 确认发布 —— 含二次确认 +5. 发布记录 —— 这批发了什么,可查随发布记录一起留的检查结果 + +🔴 **两级目标选择的判据(本版新写清)**:一个**内容账号**在投放时对应**多个平台账号**、分别投放 ⇒ 目标不是「选账号 + 选平台」两个独立动作,是**顺着内容账号往下勾它的平台账号**(`2a` §二 对象字典「平台账号」)。摘要区的「目标渠道数」= 勾中的平台账号数,「覆盖平台数」= 这些渠道落在几个平台。 +🔴 **「一版一路」**:一个**平台账号**(渠道)只对应一个版本 ⇒ 勾了 N 个平台账号就要有 N 版。发布记录**不加渠道字段**:一版一路时,从版本就能反推出渠道(`2a` F13)。 + +**主操作**:确认发布。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 检查结果 | 主屏常驻 | 删掉它,会被硬拦项挡回去却不知道为什么,主操作做不成 | +| 各版本与逐版编辑 | 主屏常驻 | 主操作对象 | +| 确认发布 | 主屏常驻 | 删掉它就没有主操作本身了 | +| 目标选择 | 可点入 | 判据答「做得成」—— 从 P4 带着版本进来时,目标已定;只有从 P1 直接进来才需要现选 | +| 发布记录 | 可点入 | 删掉它,回查改从 P7 进 | + +--- + +### P6 账号画像(导航里的第六项「账号」) + +**这一页干什么**:每个**内容账号**一份画像与记忆;它下面挂着 N 个**平台账号**(发布渠道)。看和改都在这一页。 + +**核心对象**:`Account` 账号(=内容账号;平台账号是它下面的子项,不另立对象) +**不应该负责**:独立业务流程(它只提供上下文,不在生产链上) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 账号列表 —— 选一个内容账号 +2. 画像五维 —— 定位、风格、受众、偏好与红线、长期记忆 +3. 平台账号 —— 这个内容账号下面的 N 个平台账号,每条带「平台 + 登录态 + 授权状态」 +4. 记忆条目 —— 只追加,不覆盖 +5. 关联内容 —— 这个内容账号做过的内容 + +**主操作**:保存这一份画像。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 画像五维 | 主屏常驻 | 主操作对象 | +| 账号列表 | 主屏常驻 | 删掉它,不知道在改哪个账号的画像,会改错 | +| 平台账号 | 可点入 | 删掉它,编辑与保存画像都做得成;它在要管这个账号的发布渠道(登录/授权/增删)时才需要 | +| 记忆条目 | 可点入 | 删掉它,编辑画像与保存都做得成(记忆是回写产物,不是编辑动作的输入) | +| 关联内容 | 可点入 | 删掉它,主操作不受影响 | + +⚠️ **画像五维是一块,不是五块。** 现状里它在界面上被拆成五个输入位加一行只读提示,那是③段的实现选择,不等于它是两个板块。本份只声明它是**一个业务板块**。 + +🔴 **账号是两个概念,这里说清**:**内容账号**管**内容属性**(账号设定:定位/风格/受众/偏好红线/长期记忆),**平台不归它**;**平台账号**是**发布的渠道**(带平台 + 登录态 + 授权状态)。两者是**一个内容账号 → N 个平台账号**(子项清单),**不是两个并列的对象**,⛔ 不给平台账号单独立对象(`2a` §二 对象字典「平台账号」)。⇒ 本页的归属页没变,核心对象仍是 `Account`。 + +--- + +### P7 复盘台(原 P8 记录与对账整页并入本页) + +**这一页干什么**:把一条已发布内容的表现读回来,写成这个账号的经验;同一页上还能查发布留痕、核商单与收支。 + +**核心对象**:`Review` 复盘结论(原料是 `Performance` 表现数据);本页后半还有 `PublishRecord` 发布记录与 `Campaign/Order` 商单与收支 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数/记录总数/待结算数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,10 块 · 平铺,⛔ 不划子区)** + +1. 待复盘项 +2. 这一条的表现数据 +3. 归因结论(由 AI 给出,可编辑) +4. 确认与改判 —— 采纳、驳回或改后再用 +5. 回写目标提示 —— 这次回写到哪个账号 +6. 历史复盘(可点入) +7. 发布记录 —— 谁在什么时候确认发的、发的是哪一版(⛔ 不写呈现;原 P8 整页搬来,⛔ 不是新做,是搬位置) +8. 单条溯源 —— 从记录回到内容与版本 +9. 对账核对区 —— 内容、发布记录、收支三样对得上 +10. 商单与收支(可点入,所属功能 F12 标 `P2/Deferred`,第一版可能没有) + +🔴 **这 10 块平铺,⛔ 不划子区、⛔ 页内不分段。** 前 6 块(复盘)与后 4 块(记录与对账)是**同一类事** —— 都属「**发布之后看数据与看收入**」:复盘那半看数据,记录与对账那半看收入。用户口径逐字:「发布的目的就是为了看数据和看收入啊」。⇒ ⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分区(GPT 主张把记录与对账拆出去,本版不采纳)。 + +**主操作**:确认归因并回写(复盘那半);核销一条记录(记录与对账那半)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 表现数据 | 主屏常驻 | 删掉它,归因没有依据,主操作做不成 | +| 归因结论(可编辑) | 主屏常驻 | 主操作对象 | +| 确认与改判 | 主屏常驻 | 删掉它,结论没有采纳或驳回 ⇒ 回写没有依据,等于主操作没做成 | +| 待复盘项 | 主屏常驻 | 删掉它,不知道有什么可复盘,主操作做不成 | +| 回写目标提示 | 主屏常驻 | 删掉它,回写会落到错的账号,这条经验就废了 —— 等于主操作没做成 | +| 历史复盘 | 可点入 | 删掉它,当前这次复盘仍做得成 | +| 发布记录 | 主屏常驻 | 知道有哪些记录,不知道就无从核销。判据:删掉它,核销没有对象 | +| 对账核对区 | 主屏常驻 | 核销这个主操作的对象 | +| 单条溯源 | 可点入 | 判据答「做得成」—— 核销看列表就够;要深究才点进溯源 | +| 商单与收支 | 可点入 | 删掉它,核销仍做得成;且 F12 标 `Deferred`,第一版可能整块没有(见 `2a` §三 F12 与 §六 依赖表) | + +**一句要写死的话**:第 4 块「确认与改判」**是回写的前置开关**,不是只留痕。没有人工裁决,回写这一步不成立。依据 `2a` F10 的状态流转;③段现在按「只留痕」实现(现状 `D2`),要改。 + +**另一句要写死的话**:第 7–10 这四块是**从 P8 搬过来的同一批板块**,内容一字不改。判据不是「P7 多了四个新板块」,是**页集合里再也没有 P8 这一页**(见 §七 第 2 条)。 + +--- + +## 六、页面流转契约(20 条) + +**每条写六样**:来源页面/触发动作/传递对象/对象 ID(含必要上下文)/目标页面接收方式/目标页面落地状态。 + +**每条至少带一个业务对象或它的 ID。** 光写「从哪到哪」没有工程价值 —— 上一版 18 条里 14 条就是这么写的,现状里它们要么不带东西、要么带了过去对面不读。 + +**三条总规则**(与 `2a` §一 第 3 条同源,此处是它在骨架上的落地):跨页只传 ID 加必要上下文,不传页面临时状态;一个对象只有一处产生;目标页接到 ID 必须能自己恢复出状态。 + +### 第一类 · 对象传递(上游产出对象,下游拿它新建或更新) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 7 | P2 → P3 | 对某条对标内容发起拆解 | 对标内容 → `Asset` 的原料 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 | 分区切到对应区,详情显示该内容的原文与出处 | +| 8 | P2 → P4 | 把一条选题转入创作 | `Topic` → `Content` | `topicId` | P4 **创建或切换当前 `Content`** | 当前内容=该选题;新建草稿 v1;标题继承选题标题;资产引用为空 | +| 9 | P3 → P4 | 引用一条资产去创作 | `Asset` → 当前内容的资产引用 | `assetId` | P4 把该资产挂进当前内容的资产引用 | 资产引用区列出该条 | +| 10 | P4 → P5 | 成稿态,去发布 | `ContentVersion` → `PublishTask` | `contentId` + `versionIds` | P5 创建发布任务 | 各版本按 `versionIds` 载入,检查结果待跑 | + +🔴 第 8 条治的是现状 `B8`:上一版只写「把一条选题转入创作」,③段于是只改了选题状态就跳页,创作台显示的还是写死的上一条。契约写死「创建或切换当前 `Content`」,对面就没法糊弄。 + +### 第二类 · 上下文定位(只带定位用的 ID,目标页自己去查) + +| # | 来源 → 目标 | 触发 | 传递对象(定位用) | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 1 | P1 → P2 | 点「异常值提示」里某条,或从今日待处理挑到选题类待办 | `Benchmark` 的线索 | `benchmarkId` + `filter=异常值` | P2 用 `filter` 筛对标内容,用 `benchmarkId` 定位那一条 | 列表已按筛选值过滤,停在对应那条 | +| 2 | P1 → P4 | 今日待处理里有「在写」的内容 | `Content` | `contentId` | P4 切换当前内容 | 创作流程停在该内容当前环节 | +| 3 | P1 → P5 | 今日待处理里有待审/待确认的 | `PublishTask` | `publishTaskId` | P5 载入该任务 | 停在该任务的检查与确认位 | +| 4 | P1 → P6 | 点账号矩阵里某个账号 | `Account` | `accountId` | P6 载入该账号 | 画像五维填充该账号的值 | +| 5 | P1 → P7 | 今日待处理里有待复盘的 | `Review` | `accountId`(如有 `reviewId` 一并带) | **P7 自己按 `accountId` 查出该账号的待复盘项与表现数据** | 待复盘项定位于该账号 | +| 6 | P1 → P7 | 今日待处理里有待核销的 | `PublishRecord` | `recordId` | P7 载入该条记录,对账核对区停在该条 | 对账核对区停在该条记录 | +| 11 | P4 → P6 | 需要查这个账号的口径 | `Account` | `accountId` | P6 载入该账号 | 画像五维填充该账号的值 | +| 12 | P5 → P6 | 发布前要核账号口径 | `Account` | `accountId` | 同第 11 条 | 同第 11 条 | +| 15 | P6 → P4 | 画像保存后回到创作 | `Account`(回程) | `accountId`,如来时带了 `contentId` 一并带回 | P4 保持或切换当前内容 | 来时带了 `contentId` 则回到它,否则当前内容不变 | +| 16 | P6 → P5 | 画像保存后回到发布 | `Account`(回程) | `accountId`,如来时带了 `publishTaskId` 一并带回 | P5 保持当前任务 | 任务不变 | +| 18 | P7 → P5 | 从一条记录回到它对应的版本 | `PublishRecord` → `ContentVersion` | `recordId`(由它解析出 `versionIds`) | P5 载入这些版本 | 各版本定位于该记录当时用的那一版 | + +🔴 第 5 条治的是现状 `B9`:上一版写「点账号矩阵里的某个账号 → P7」,③段把被点账号放进了页面临时状态,而 P7 根本不读它,看的是待复盘表默认那一条。契约写死「传 `accountId`,P7 自己查」,就把这条路堵上了。 + +### 第三类 · 状态完成(下游这一步做完,上游那个对象的状态才算走完) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 13 | P5 → P7 | 已发布,去复盘 | `PublishRecord` → `Review` | `recordId` + `accountId` | P7 为该记录建一条待复盘项 | 待复盘项多出这一条,表现数据取该记录用的版本 | +| 14 | P5 → P7 | 发布后去查留痕 | `PublishTask` → `PublishRecord` | `publishTaskId` | P7 载入刚产生的那条记录 | 发布记录列表多出这一条并停在它上面 | +| 17 | P7 → P6 | 归因回写 | `Review` → `Account` 的记忆 | `accountId` + `reviewId` | P6 往该账号追加一条记忆条目 | 记忆条目多出一条,长期记忆数 +1 | + +🔴 第 13 条治的是现状 `C1`:上一版写的 P5 → P7,是 18 条里唯一一条界面上找不到任何入口的。本版把它列进 P0 必须通的四条之一(见下)。 +🔴 第 14 条治的是现状 `B1`:③段「确认发布」只写了个内存标志加一句提示,P8 的记录表永远不会多出这一条。契约写死「目标页载入刚产生的那条记录」,对面就得真落一条。 + +### 两条新增的流转(标「新增·待确认」,见 §十) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 19 | P7 → P1 | 复盘结论确认后,回到矩阵 | `Review` → 由它刷新的 `Performance` 汇总 | `accountId`(可选) | P1 用该结论刷新异常值提示/今日待处理/本月表现最好的一条 | 对应板块多出这一条 | +| 20 | P7 → P2 | 复盘发现转下一轮选题 | `Review` → `Topic` | `reviewId` | P2 以该结论为来源建一条草稿选题 | 选题库「待做」多出一条,来源标该复盘 | + +**为什么这两条单列**:第①棒逐条盘点的 18 条里没有它们,它们是 GPT 新加的,代表「复盘反哺」那一段闭环。不写进去,闭环在文档上就是断的,第④步做界面对不上;写进去却不标,等于偷偷扩范围。所以:写进去,标出来。 + +### 优先级:哪几条必须先通 + +主链的第一段是 `Topic → Content → ContentVersion → PublishTask → PublishRecord → Review`。落在流转上,**P0 必须先通的是四条**: + +1. 第 8 条 P2 → P4(选题 → 内容) +2. 第 10 条 P4 → P5(成稿 → 发布任务) +3. 第 14 条 P5 → P7(发布 → 发布记录) +4. 第 13 条 P5 → P7(发布记录 → 待复盘) + +后做的(重要,但不卡主生产链):第 1、2、3、4、5、6、9、11、12、15、16、18 条。第 19、20 条等 §十 第 3 项定完再排。 + +--- + +## 七、骨架受限的两处(依赖未复核项,沿用) + +1. **P1 的形态挂在待复核第 5 条上**(矩阵级视图是否真需要)。若答「不需要」,P1 降为单账号今日,矩阵列表下移。这是一处**结构性分支**,③段动工前必须定。 +2. **P7 的第 10 板块「商单与收支」挂在待复核第 6 条与 A3 上**(商单对账进不进第一版;收支口径)。若「不进第一版」,P7 的这半只留第 7、8、9 板块(原 P8 的第 1、2、3 块)。 + +**回收三字段**:复核人 = 主会话转用户;复核时机 = ②段收口时一次性过,③段动工前必须定;结论落点 = 本文件 §七 与 §五 P1、P7 对应板块。 + +--- + +## 八、五样给全核对(方法论要求,缺一样③段就没方向) + +| 要求 | 本份落在哪 | 齐 | +|---|---|---| +| 页面清单(有哪几页,每页一句话说清干什么) | §五 七页,每页第一段 | ✅ | +| 页面流转(谁跳到谁、什么条件下) | §六 20 条,每条六要素 + 三条总规则 + P0 四条 | ✅ | +| 每页板块清单与排列(几个块、从上到下什么顺序) | §五 每页「业务板块清单(从上到下)」,逐页编号 | ✅ | +| 每页主操作(唯一那个推进动作) | §五 每页「主操作」 | ✅ | +| 每条信息的分档(主屏常驻/可点入,含判据回答) | §五 每页「信息分档」表 | ✅ | +| 页型一句 | §二 | ✅ | +| 导航结构(几项、各项指向哪页、顺序) | §三 | ✅ | + +--- + +## 九、与上一版(V3)的实质差别(逐条) + +**八条口径的落地** + +1、**功能归属判据换成「一类事情放同一个页面」**(`2a` §一 第 2 条)。落到骨架上,**七页集合与 P1–P7 的板块归属一页没动** —— 用新判据把七页复核了一遍,归属全部成立。改的是判据文字,不是页结构(§一 第 2 条)。 +2、**资产入库不限页,资产库页改成「统一管理」**(P3 §五)。P3 的页面职责由「存拆解结果」改成「统一管理资产条目」,主操作跟着改;P2 的「对标内容」块写明拆解结果**可就地入库**。⛔ P3 不再是唯一入库口。本页板块仍是 4 块,总数不变。 +3、**P2 选题库改用「进度 × 类型」两个正交维度**(P2 §五)。进度沿用 `待做/在写/已用`,类型新加 `选题/对标线索/评论洞察/数据异动/灵感`,每类自带后续动作。⛔ 不新增「待整理」状态、⛔ 不做「先选去向」。 +4、**P2 的「灵感速记」并进「选题库」**(P2 5 → 4 块)。顺手订正 V3 遗留:同一页的板块清单与信息分档表对「灵感速记」写法打架 —— 现在统一成「随手记是全局可达的框架层入口(不占板块),写进来的东西落选题库」。 +5、**P5 目标选择改成两级**(P5 §五 第 1 块):先选内容账号,再勾它下面的**平台账号**(渠道)。数据摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」。 +6、**P5 第 2 块写死「一个平台账号一版」(一版一路)**(P5 §五 第 2 块)。依据 `2a` F13;`PublishRecord` 不加渠道字段。 +7、**P6 画像六维收成五维**(去掉「平台」这一维),**新增「平台账号」板块**(P6 4 → 5 块)。平台账号=发布渠道,每条带「平台 + 登录态 + 授权状态」,是内容账号下的子项清单(1 → N),⛔ 不另立对象。 +8、**P7 写死「平铺、不划子区」**(P7 §五)。10 块属「发布之后看数据与看收入」同一类事,⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分区。 + +**数字** + +9、**业务板块总数不变,仍是 39**:P2 由 5 块收成 4 块(−1),P6 由 4 块变 5 块(+1),其余五页不变 ⇒ 净变化 0。七页页数与 20 条流转契约都不动。(逐页数:5/4/4/6/5/5/10。) + +--- + +### 附:V3 相对 V2 的实质差别(存档,⛔ 本版未推翻) + +**页集合与导航** + +1、**页数由八页收成七页**。P8 记录与对账**整页撤销**,四个板块原样接入 P7,导航里不再单列。判据是「页集合里没有 P8」,不是「把 P8 改个名」(§五 P7)。 +2、**导航由「三组 + 一个跨组入口」压成一层七项**:首页/选题/创作/投放/复盘/账号/**资产(排最后)**。零组标、零跨组、零第二层。上一版的三组标题与跨组入口全部去掉(§三)。 +3、**导航项名与页的对应写死**:首页→P1、选题→P2、创作→P4、投放→P5、复盘→P7、账号→P6、资产→P3。这不只是顺序表,是「点哪一项到哪一页」的判据(§三)。 +4、**P5 在导航里显示为「投放」**。它仍是发布中心,页内写清只管内容发布与排期。**改名不扩功能** —— 上一版叫「发布」,本版只换显示名与归属说明。 +5、**P6 不再是「跨组入口」**(跨组这个概念随分组一起去掉),它就是一层的第六项「账号」。 + +**功能与板块的对应** + +6、**新增「功能 ↔ 板块」一一对应关系,并写进可机检位置**。上一版只声明「功能按使用场景组织」,没有逐块落点;本版给每页每个板块标出它承担哪条功能,且自检里双向查(无悬空功能、无孤立板块)——对应关系从此可机检,不靠人读(§五,原型 `FN_HOME`/`FN_MAP` 与自检 5b-3)。 +7、**P7 由 6 块变 10 块**:前 6 块是复盘,后 4 块是搬来的记录与对账(发布记录/单条溯源/对账核对区/商单与收支)。 + +**流转与冻结** + +8、**流转契约目标页的三处改动**:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)目标页由 P8 改指 **P7**;第 18 条(记录 → P5)来源页由 P8 改指 **P7**。条数仍 20,六要素契约本身一字未动(§六)。 +9、**骨架冻结表由「八页 39 块」改成「七页 39 块」**。页结构与板块归属的判据同步改,冻结照旧逐页逐位比对(§四、§五)。 + +**数字** + +10、**业务板块总数不变,仍是 39**。P7 从 6 块变 10 块(+4),P8 整页撤掉(−4),六页不变 ⇒ 净变化 0。 + +--- + +### 附:V2 相对 V1 的实质差别(沿用存档,⛔ 本版未动) + +**结构层** + +1、**新增「页面公共框架」一节(§四)**,给出四样内容与三条硬规则。V1 完全没有这一层,③段的页壳因此成了文档外的黑户(现状 `A1`)。 +2、**撤销各页的「功能入口」板块**(V1 的③段长出来、②段没写的那一层)。撤销之后入口回到所属业务板块或全局可达位置。依据:它的文字就是流转表的副本(现状 `A2`)。 +3、**骨架冻结升级成对象冻结**(§四+§七)。V1 只写「③段不许新增、移动、删除板块」,没定义「什么算板块」;V2 把判据从「有没有套统一板块的样式」换成「有没有一个明确的业务对象」,并写明新增业务能力必须先进 `2a` 功能清单、完成对象归属。 +4、**每页新增两栏:核心对象、不应该负责**。V1 只有「职责+板块」。 +5、**流转从「一句话」改成六要素契约(§六)**,20 条逐条写全,并按对象传递/上下文定位/状态完成三类分开。V1 只有「从哪到哪、什么条件下」两列。 +6、**新增流转优先级:P0 四条**(§六末)。 + +**页面与板块层** + +7、**P4:「当前内容标识」从业务板块上移进公共框架**,改名「当前内容上下文」。 +8、**P4:新增板块「录制卡片与画板」**,落 F14。 +9、**P4:新增板块「版本管理」承担 F7 与 F8**。 +10、**P5:第 2 板块改名「各版本与逐版编辑」**,只消费 P4 生成的版本,⛔ 不再负责展开。 +11、**P5:第 5 板块从「发布记录入口」改成「发布记录」**。 +12、**P6:写死「画像六维是一块,不是六块」**。 +13、**P7:写死「确认与改判是回写的前置开关」**。 +14、**P1:第 5 板块从「全局检索与随手记入口」改成「全局检索」**,随手记移到公共框架的全局可达位置。 + +**数字与核对层** + +15、**V2 重数业务板块总数=39 块**,并订正第①棒 §四 A1 的加总差错(原文写 38,自给的 `5+5+4+6+5+4+6+4` 等于 39)。 +16、**零视觉词红线照旧**,全文无配色/字体/间距/组件样式/动效,也无「卡片」「按钮」「标签」这类形态词。 +17、**V2 相对 V1 一页没删、主操作一页没改。** ⚠️ 本版(V3)**推翻了这一条** —— 本版删了 P8 整页(见本 §九 第 1 条),这是用户口径要求的改动。 + +--- + +## 十、待与用户确认项 + +派活单要求:「部分采纳」那三条涉及改②段结构的,先按 GPT 的方向落地,再在文末单列。以下是本份范围内的全部待确认项。 + +**1、导航项的显示名与侧栏短名怎么对齐** +本版把导航压成一层七项(首页/选题/创作/投放/复盘/账号/资产),按用户口径定的名字。V2 那套「三组+跨组」的组名问题随分组一起去掉,不再是问题。**新冒出来的一个问号**:网页 App 的侧栏是窄的,七项如果都用全名(如「首页」「选题」「创作」等)宽度够,但要不要另配一套两字短名(如「复盘台」缩成「复盘」「账号画像」缩成「账号」),得先问 —— 现在⑦段用的是用户口径的全名,没另起一套短名。 +为什么不自决:起短名等于顺手加一套命名口径,属于改口径,不是执行细节。 + +**2、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 主张合成一份、九节。本版的处置是**内容照收、形态不收**:九节要的东西全部落进了 `2a`+`2b` 两份(详见 `2a-产品功能-新版.md` §九 第 1 项)。 +为什么不自决:合成会新增文档层,属于扩大可见面。 + +**3、两条新增流转(§六 第 19、20 条)要不要进②段** +写进去了,但每条都标了「新增·待确认」。理由与处置见 §六 那一段。 +为什么不自决:新增流转是扩范围。 + +**4、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳**三分类**,六型没进正文。 +为什么不自决:GPT 没把六型和这 20 条逐条对齐,直接搬进来会在同一件事上造出第二份定义。要进得先把 20 条逐条归型。 + +**5、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上(§七)。 + +**6、一条计数订正请顺手认一下** +§九第 15 条(存档段):第①棒写「八页共 38 个板块」,实际加总是 39;V2 重数为 39,页数由八变七、P8 四块并入 P7 之后,**总数仍是 39**(搬位置,不增减)。这条不是要用户拍板,只是请核一下按哪个数往下走。 +⚠️ 与旧版不同:这次**页数由八变七**,但**板块总数仍是 39**(P8 四块搬进 P7,只是换了页)。 + +**7、定时发布:挂起(本轮不落)** +用户口径逐字(2026-10-10 07:56):「后续具体做投放功能的时候在说」。⇒ 本轮**不写**定时发布:⛔ 不在 P5 加「定时设置」板块、⛔ 不新增状态、⛔ 不动流转契约。当前只在 `2a`/`2b` 各记一条登记,等真做投放功能时再议。 +- **复核人** = 主会话转用户(真做投放功能时) +- **复核时机** = **立项做投放功能时**(⛔ 不是②段收口) +- **结论落点** = 本文件 §十 与本项 + `2a-产品功能-新版.md` §九 第 7 项;届时定「平台原生定时」还是「本地调度」走哪一条。 + +**回收三字段**(本份第 1–6 项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3、4 条要赶在第④步动界面之前定(第 7 项不在此列,见上) +- 结论落点 = 本文件 §十 与 `2a-产品功能-新版.md` §九 + +--- + +## 附:本份自检 + +- [x] 七页,每页有核心对象、不应该负责、公共框架含什么、业务板块清单与顺序、主操作、信息分档(含判据回答) +- [x] 页面公共框架被显式定义,且写明不算板块数、不参与功能归属、不占冻结计数 +- [x] 每页的业务板块清单里没有公共框架那四样(框架与板块彻底分开) +- [x] 导航一层七项,项名与顺序照用户口径(首页/选题/创作/投放/复盘/账号/资产),零组标、零跨组、零第二层 +- [x] 每一页每个板块都标出它承担哪条功能,双向无悬空、无孤立(可机检:原型 `FN_HOME`/`FN_MAP` + 自检 5b-3) +- [x] 流转 20 条,每条六要素齐全;18 条沿用②段原条目,2 条新增并标注 +- [x] 流转按三类分开;P0 四条单列 +- [x] ③段现在实现不了的四处(`B1`/`B8`/`B9`/`C1`)在契约里都有对应写法 +- [x] 零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现;未用「卡片」「按钮」「标签」这类形态词 +- [x] 未写功能条目的有无与优先级(那是 `2a`),未描述页面「长什么样」 +- [x] 业务板块总数写明(39 块),并订正了第①棒的一处加总差错;V4 逐页数 5/4/4/6/5/5/10,加总仍是 39 +- [x] P2 选题库写明「进度 × 类型」两个正交维度;⛔ 未新增「待整理」状态、⛔ 未做多去向 +- [x] 资产入库不限页写清,P3 职责改成「统一管理」;与「一个对象只有一处产生」的关系写明 +- [x] P5 目标选择两级(内容账号 → 平台账号)写清;摘要区对齐「目标渠道数/覆盖平台数」;第 2 块写死「一版一路」 +- [x] P6 账号分「内容账号/平台账号」两个概念:画像五维 + 平台账号子项清单;⛔ 未新增独立对象 +- [x] P7 10 块平铺、不划子区,并写明属「发布之后看数据与看收入」一类 +- [x] 定时发布挂起已登记(含回收三字段),本轮未落进骨架 +- [x] 骨架受限的两处标出来源(待复核第 5、6 条与 A3),带回收三字段 +- [x] 对象冻结声明写明确:新增业务能力必须先进 `2a` 功能清单并完成对象归属 +- [x] §九 逐条列出与上一版(V3)的实质差别(9 条)+ V3 相对 V2 的存档(10 条)+ V2 相对 V1 的存档(17 条) +- [x] §十 单列了全部待确认项的处置与理由 +- [x] 未新增②段两份之外的文档;上游文件全部只读使用 + +*(说人话自评:46/50 直接性 10 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 8 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fc471a.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fc471a.md new file mode 100644 index 0000000..1e60fcb --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局-新版__fc471a.md @@ -0,0 +1,550 @@ +# 2b 界面布局(新版 V3) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 2 子步,产出 `prd/2b-界面布局.md` +> 本版在 V2 基础上**按用户口径改导航与页面归属**(2026-10-09 用户令:导航一层七项、P8 并入复盘、功能与板块一一对应)。 +> 上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)与 V2 稿。 +> 只读输入:①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、②棒 GPT 意见与采纳决策、V2 版 `2b-界面布局-新版.md`、①段 `1a-需求文档.md` 与 `1e-使用场景.md`。 +> 判据源:`stage-requirements/SKILL.md` §2b + `assets/diagram-design/`(本份只给灰块骨架,不出图)。 +> 本份专管界面骨架:有哪几页、每页几个板块、板块怎么排、跨页带什么过去。⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能-新版.md`)。 +> ⛔ **全文零视觉词** —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。本份只说「有哪些块、什么顺序、点它带什么过去」。 + +--- + +## 〇、一屏结论 + +- **页数由八页收成七页**:P8 记录与对账**整页撤销**,它的四个板块(发布记录 / 单条溯源 / 对账核对区 / 商单与收支)原样接进 P7 复盘台。P7 由 6 块变 10 块;**业务板块总数不变,仍是 39**(P8 那 4 块搬到 P7,总数不动)。 +- **导航由「三组 + 一个跨组入口」压成一层七项**:首页 / 选题 / 创作 / 投放 / 复盘 / 账号 / 资产(资产排最后)。⛔ 没有组标、⛔ 没有跨组分隔、⛔ 没有第二层。 +- **P5 在导航里叫「投放」**,页面名仍是「发布中心」;本版在页内写清它只管内容发布与排期,⛔ 没有扩功能。 +- **新增一条可机检的对应关系**:每条功能 F1–F14 落到它归属页的具体板块上(原型里落在 `FN_MAP` / `FN_HOME`,由自检双向核)。 +- 其余骨架照 V2:页面公共框架(Page Shell)不算板块;20 条流转契约不变,只是原来指向 P8 的三条改指 P7。 +- 每页补两栏:**核心对象**与**不应该负责**(V2 已有,本版不变)。 + +--- + +## 一、这一版骨架改了什么(四件事) + +**1、P8 整页并进 P7。** +用户口径逐字:「**P8 放复盘**」「**当然是功能也要放过去**」。P8 记录与对账不再是一页 —— 它的四个板块原样接在 P7 的板块清单后面,导航里也不再单列。判据不是「把 P8 改名」,是**页集合里从此没有 P8**。 + +**2、导航压平成一层的七项。** +用户口径逐字:「**左侧导航应该是 首页 选题 创作 投放 复盘 账号**」「**P3 放导航 排最后**」。V2 里的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组分隔**一起撤掉**;项仍是七项、一项一页,顺序照用户给的先后,资产排最后。 + +**3、功能与板块的对应关系写进可机检的位置。** +用户口径逐字:「**所有功能要和各自板块对应**」。本版把「哪条功能归哪一页的哪些板块」写成一张表(原型里的 `FN_MAP`),归属页写成另一张(`FN_HOME`,逐字取 `2a` §四)。自检两端一起查:功能不得悬空、板块不得孤立、每条功能的每个归属页上都得有它的板块。 + +**4、三处指向 P8 的流转改指 P7。** +流转契约本身(六要素、20 条)不动,只把目标页由 P8 换成 P7:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)、第 18 条(记录 → P5)。第 13 条(P5 → 复盘)本来就指向 P7,不变。 + +--- + +## 二、页型(一句判型 + 依据) + +**本产品是工具型页面,不是营销页。** + +依据:`1a` §一 与 §四 里的用户是天天来干活的 MCN 团队(内容负责人、编导与文案、剪辑与投放),不是第一次来的访客。§八 留下的三个入口全是干活入口,没有一处是「让人下决心」的落地页。 +⇒ ③段不要套落地页骨架。判据:本产品的每一页都有人在里面完成一件事,没有一页是为了让人「看一眼就下决心」而存在的。 + +--- + +## 三、导航结构(一层七项) + +**门开在 P1(导航里叫「首页」)。** 导航是**一层七项** —— ⛔ 没有分组、⛔ 没有跨组分隔、⛔ 没有第二层。 + +| 导航项 | 落哪一页 | +|---|---| +| 首页 | P1 矩阵总览 | +| 选题 | P2 选题雷达 | +| 创作 | P4 创作台 | +| 投放 | P5 发布中心 | +| 复盘 | P7 复盘台(P8 已并入,见 §五) | +| 账号 | P6 账号画像 | +| 资产 | P3 资产库(排最后) | + +**项名与页名是两层,别混。** 导航里的名字照用户口径;页面自己的名字沿用不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。两处对照就是上表 —— 最要紧的一处是 **P5:导航叫「投放」,页面仍叫「发布中心」**,这一页只管内容发布与排期,版本生成在创作台,⛔ 没有扩功能。 + +**顺序是硬约束。** 资产排最后(用户明说);其余六项按用户给的先后(首页 → 选题 → 创作 → 投放 → 复盘 → 账号)。 + +**账号为什么不再标「跨组」。** V2 把它标成跨组,是因为那时有三组可比。三组撤掉之后「跨组」这个标记失去参照物,本版一并去掉;P6 仍是全局上下文能力(不在生产链任何一环上),这一点没变。 + + +--- + +## 四、页面公共框架(Page Shell) + +七页每页都有这一层,四样,从上到下: + +1. **页面标题区** —— 页名,加一句话说清这一页干什么。 +2. **数据摘要区**(可选)—— 本页若干个数的一行摘要。哪页有、摘要哪几个数,由本页需要决定;不是每页都必须有。 +3. **页面操作区** —— 本页的页面级操作。 +4. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 + +**三条硬规则**(这是本版新立的,堵的是现状 `A1`/`A3`): + +- 页面公共框架**不计入业务板块数量**,每页的板块清单里不列它。 +- 页面公共框架**不参与功能归属**。功能归属只看核心业务对象(见 `2a-产品功能-新版.md` §一 第 2 条)。 +- 页面公共框架**不占骨架冻结的计数**。冻结冻的是业务板块与对象,不是框架。 + +**一处容易混的地方,写清楚:** P2 的「对标监控概览」在③段里长得和别的页那行数据摘要很像,但它是**业务板块**,不是框架。判据不是「长得像不像」,是「它是不是这一页某个功能的对象」。P2 那四个数是 F1 的产出(在监控的账号数、低粉爆款条数、异常值条数、近三天更新条数),所以它算板块;P1 那行数只是本页概览,不算。形态相似不等于产品对象相同。 + +**全局可达的那一个入口。** 只有「随手记」(F2)放在全局可达的位置:任意页面一次点击内碰得到。它不占任何一页的业务板块位。依据:F2 是 P0,`2a` 与 `1a` §八 都把它当主链的第一跳,不能埋在两层下。 + +--- + +## 五、七页骨架 + +每页写七样:这一页干什么/核心对象/不应该负责/公共框架含什么/业务板块清单(从上到下)/主操作/信息分档。 + +### P1 矩阵总览 + +**这一页干什么**:一屏回答每个账号今天该发什么、发了什么、效果如何。 + +**核心对象**:`Account` 账号、`Performance` 表现数据 +**不应该负责**:内容的深度编辑(那是 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)+ 页面操作区。 +🔴 上一版③段这两块就是「统计条」,本版归入框架,不算板块。它的「功能入口」那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +2. 账号矩阵 —— 每个账号今日该发什么/已发什么/效果如何 + ⛔ 本块**不写怎么呈现**(矩阵、列表都是形态,归③段判) +3. 异常值提示 —— 最近哪些内容的数据异动 +4. 本月表现最好的一条 +5. 全局检索 + +**主操作**:决定今天先处理哪一件事,并进到那一件事。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 账号矩阵 | 主屏常驻 | 删掉它,主操作的对象就没了 —— 不知道有哪些账号,无从决定先处理哪件 | +| 今日待处理 | 主屏常驻 | 删掉它,主操作没有候选可挑,做不成 | +| 异常值提示 | 可点入 | 删掉它,主操作仍做得成(异常值是 P2 的输入,不是这一页的决策依据) | +| 本月表现最好 | 可点入 | 删掉它,主操作完全不受影响 —— 它只是激励 | +| 全局检索 | 可点入 | 删掉它,主操作做得成;它是本页的一个旁路,不是推进动作的一部分 | +| 随手记 | 全局可达(框架层,不占板块) | 它是 F2 的入口,任意页面一次点击内能碰到 | + +🔴 本页依赖 **A1**(账号数 10–50)与**待复核第 5 条**(矩阵级视图是否真需要)。若第 5 条复核为「不需要」,P1 从「矩阵总览」降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换。 + +--- + +### P2 选题雷达 + +**这一页干什么**:找选题,并且把选中的那条推进下一步。 + +**核心对象**:`Benchmark` 对标号、`Topic` 选题 +**不应该负责**:内容生产(那是 P4) + +**页面公共框架**:页面标题区 + 页面操作区 + 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 +🔴 上一版③段的功能入口那块**撤销**。本页**没有**数据摘要区 —— 因为这一页那四个数(对标监控概览)本身就是业务板块,属于 F1 的产出。 + +**业务板块清单(从上到下,5 块)** + +1. 对标监控概览 —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数 +2. 对标内容 —— 每条带它相对该账号平时水平的倍数(⛔ 同 P1,不写呈现) +3. 评论区洞察(可点入子区)—— 取评论、出 AI 候选选题(`2a` F3) +4. 选题库 —— 分「待做/在写/已用」三组 +5. 灵感速记 + +**主操作**:把一条选题推进下一步(去创作台,或去资产库拆解)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 对标内容 | 主屏常驻 | 删掉它,主操作的对象没了,做不成 | +| 选题库 | 主屏常驻 | 删掉它,主操作没有可推进的条目,做不成 | +| 对标监控概览四数 | 主屏常驻 | 删掉它,看不出哪个账号值得看 —— 列表会长到没法挑,等于主操作做不成 | +| 评论区洞察 | 可点入 | 删掉它,仍能从对标列表拿到选题 | +| 灵感速记 | 全局可达(框架层,不占板块) | 同 P1 的随手记 | + +--- + +### P3 资产库 + +**这一页干什么**:把拆解结果存下来,下次能直接拿到。 + +**核心对象**:`Asset` 资产条目 +**不应该负责**:内容流程(拆解完就走,创作在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(条目总数/已入库/待入库/分区数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 分区切换 —— 角度/结构/开场白/标题,一次看一个 +2. 资产条目 —— 当前分区下的条目(⛔ 不写呈现) +3. 单条详情 —— 原文、出处、草稿标记 +4. 引用入口 —— 把这条拿去创作台用 + +**主操作**:把一条拆解结果入库;已入库的则把它引用到创作台。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 分区切换 | 主屏常驻 | 删掉它,四个分区分不开,入库不知道该进哪一区,主操作做不成 | +| 资产条目 | 主屏常驻 | 主操作对象 | +| 单条详情(原文/出处) | 可点入 | 删掉它,入库与引用都还做得成(入库门禁在守卫层,不靠这里显示) | +| 引用入口 | 可点入 | 删掉它,`2a` F4 的主路径改成从创作台来找,多绕一步;但 P3 自己的主操作(入库)不受影响 | + +--- + +### P4 创作台 + +**这一页干什么**:一条内容从选题走到成稿,再从成稿展开成多账号多平台的版本。 + +**核心对象**:`Content` 内容、`ContentVersion` 内容版本 +**不应该负责**:真正执行发布(那是 P5) + +**页面公共框架**:页面标题区 + **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 页面操作区 + 辅助入口区。 +🔴 **「当前内容标识」从板块上移到这里。** 它服务整页,不是某个功能的对象。依据:GPT 的 P4 例(公共框架=当前内容上下文 + 页面级操作),采纳决策 G24。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,6 块)** + +1. 创作流程 —— 七个环节的当前位置,可回退 +2. 当前环节工作区 —— 这一步实际干活的地方 +3. AI 产出与采纳 —— 当前环节的 AI 产出(生成中/已生成/失败重试)+ 采纳·驳回·改后再用 +4. 资产引用 —— 从资产库拿角度、结构、开场白、标题 +5. 版本管理 —— 一稿多版,含母版到多账号多平台的展开 + 🔴 **本块是 F7 与 F8 的落点。** 上一版把 F7 拆成「P4 出成稿、P5 展开」两头各半,P4 侧连发起入口都没有。本版按 `2a` 的归属把它收回这里:展开与逐版确认发生在 P4,P5 只拿去发。 +6. 录制卡片与画板 —— 成稿态之后,把内容转成对着讲的卡片(`2a` F14) + 🔴 **本块是补上的。** 上一版②段 P4 的板块清单里没有它,而 `1a` §五 S3 的场景、`1a` §六 F14、`1e` §四 的映射里都有它(现状 `D3`:四处不一致)。本版按 `2a` F14 归 P4 的结论把它补进板块清单。它是**成稿之后**的动作,不是创作流程七个环节里的一环 —— 这个区分写在这里,免得③段又把它塞进七步里。 + +**主操作**:把当前环节推进到下一环节。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 创作流程 | 主屏常驻 | 删掉它,不知道下一环节是什么,主操作做不成 | +| 当前环节工作区 | 主屏常驻 | 主操作的对象 | +| AI 产出与采纳 | 主屏常驻 | 删掉它,当前环节的产出无处看、无处采纳 ⇒ 推进到下一环节做不成 | +| 当前内容上下文 | 主屏常驻(框架层,不占板块) | 删掉它,改到别的选题上也不知道,等于做错 | +| 资产引用 | 可点入 | 删掉它,仍能凭空写(这正是 S2 要治的老毛病),主操作本身做得成 | +| 版本管理 | 可点入 | 删掉它,推进流程不受影响;只有回溯旧版或多账号展开时才需要 | +| 录制卡片与画板 | 可点入 | 删掉它,走到成稿并发布仍做得成;它只在想生成卡片时才需要 | + +--- + +### P5 发布中心 + +**这一页干什么**:把成稿过来的版本过闸,由人确认发出。 + +**核心对象**:`PublishTask` 发布任务、`PublishRecord` 发布记录 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(目标账号数/目标平台数/本批版本数/硬拦项数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。它上面原本挂着「创作台」与「记录与对账」两个跳转,这两个跳转纳入 §六 的流转契约(P5→P7 见第 14 条,回创作台走流程)。 + +**业务板块清单(从上到下,5 块)** + +1. 目标选择 —— 这批版本发给哪些账号、哪些平台 +2. 各版本与逐版编辑 —— 一个目标一版 +3. 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +4. 确认发布 —— 含二次确认 +5. 发布记录 —— 这批发了什么,可查随发布记录一起留的检查结果 + +**主操作**:确认发布。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 检查结果 | 主屏常驻 | 删掉它,会被硬拦项挡回去却不知道为什么,主操作做不成 | +| 各版本与逐版编辑 | 主屏常驻 | 主操作对象 | +| 确认发布 | 主屏常驻 | 删掉它就没有主操作本身了 | +| 目标选择 | 可点入 | 判据答「做得成」—— 从 P4 带着版本进来时,目标已定;只有从 P1 直接进来才需要现选 | +| 发布记录 | 可点入 | 删掉它,回查改从 P7 进 | + +--- + +### P6 账号画像(导航里的第六项「账号」) + +**这一页干什么**:每个账号一份画像与记忆,看和改都在这一页。 + +**核心对象**:`Account` 账号 +**不应该负责**:独立业务流程(它只提供上下文,不在生产链上) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 账号列表 —— 选一个账号 +2. 画像六维 —— 定位、风格、受众、平台、偏好与红线、长期记忆 +3. 记忆条目 —— 只追加,不覆盖 +4. 关联内容 —— 这个账号做过的内容 + +**主操作**:保存这一份画像。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 画像六维 | 主屏常驻 | 主操作对象 | +| 账号列表 | 主屏常驻 | 删掉它,不知道在改哪个账号的画像,会改错 | +| 记忆条目 | 可点入 | 删掉它,编辑画像与保存都做得成(记忆是回写产物,不是编辑动作的输入) | +| 关联内容 | 可点入 | 删掉它,主操作不受影响 | + +⚠️ **画像六维是一块,不是六块。** 现状里它在界面上被拆成五个输入位加一行只读提示,那是③段的实现选择,不等于它是两个板块。本份只声明它是**一个业务板块**。 + +--- + +### P7 复盘台(原 P8 记录与对账整页并入本页) + +**这一页干什么**:把一条已发布内容的表现读回来,写成这个账号的经验;同一页上还能查发布留痕、核商单与收支。 + +**核心对象**:`Review` 复盘结论(原料是 `Performance` 表现数据);本页后半还有 `PublishRecord` 发布记录与 `Campaign/Order` 商单与收支 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数/记录总数/待结算数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,10 块)** + +前 6 块是复盘(原 P7 的): + +1. 待复盘项 +2. 这一条的表现数据 +3. 归因结论(由 AI 给出,可编辑) +4. 确认与改判 —— 采纳、驳回或改后再用 +5. 回写目标提示 —— 这次回写到哪个账号 +6. 历史复盘(可点入) + +后 4 块是记录与对账(原 P8 整页搬来,⛔ 不是新做,是搬位置): + +7. 发布记录 —— 谁在什么时候确认发的、发的是哪一版(⛔ 不写呈现) +8. 单条溯源 —— 从记录回到内容与版本 +9. 对账核对区 —— 内容、发布记录、收支三样对得上 +10. 商单与收支(可点入,所属功能 F12 标 `P2/Deferred`,第一版可能没有) + +**主操作**:确认归因并回写(复盘那半);核销一条记录(记录与对账那半)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 表现数据 | 主屏常驻 | 删掉它,归因没有依据,主操作做不成 | +| 归因结论(可编辑) | 主屏常驻 | 主操作对象 | +| 确认与改判 | 主屏常驻 | 删掉它,结论没有采纳或驳回 ⇒ 回写没有依据,等于主操作没做成 | +| 待复盘项 | 主屏常驻 | 删掉它,不知道有什么可复盘,主操作做不成 | +| 回写目标提示 | 主屏常驻 | 删掉它,回写会落到错的账号,这条经验就废了 —— 等于主操作没做成 | +| 历史复盘 | 可点入 | 删掉它,当前这次复盘仍做得成 | +| 发布记录 | 主屏常驻 | 知道有哪些记录,不知道就无从核销。判据:删掉它,核销没有对象 | +| 对账核对区 | 主屏常驻 | 核销这个主操作的对象 | +| 单条溯源 | 可点入 | 判据答「做得成」—— 核销看列表就够;要深究才点进溯源 | +| 商单与收支 | 可点入 | 删掉它,核销仍做得成;且 F12 标 `Deferred`,第一版可能整块没有(见 `2a` §三 F12 与 §六 依赖表) | + +**一句要写死的话**:第 4 块「确认与改判」**是回写的前置开关**,不是只留痕。没有人工裁决,回写这一步不成立。依据 `2a` F10 的状态流转;③段现在按「只留痕」实现(现状 `D2`),要改。 + +**另一句要写死的话**:第 7–10 这四块是**从 P8 搬过来的同一批板块**,内容一字不改。判据不是「P7 多了四个新板块」,是**页集合里再也没有 P8 这一页**(见 §七 第 2 条)。 + +--- + +## 六、页面流转契约(20 条) + +**每条写六样**:来源页面/触发动作/传递对象/对象 ID(含必要上下文)/目标页面接收方式/目标页面落地状态。 + +**每条至少带一个业务对象或它的 ID。** 光写「从哪到哪」没有工程价值 —— 上一版 18 条里 14 条就是这么写的,现状里它们要么不带东西、要么带了过去对面不读。 + +**三条总规则**(与 `2a` §一 第 3 条同源,此处是它在骨架上的落地):跨页只传 ID 加必要上下文,不传页面临时状态;一个对象只有一处产生;目标页接到 ID 必须能自己恢复出状态。 + +### 第一类 · 对象传递(上游产出对象,下游拿它新建或更新) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 7 | P2 → P3 | 对某条对标内容发起拆解 | 对标内容 → `Asset` 的原料 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 | 分区切到对应区,详情显示该内容的原文与出处 | +| 8 | P2 → P4 | 把一条选题转入创作 | `Topic` → `Content` | `topicId` | P4 **创建或切换当前 `Content`** | 当前内容=该选题;新建草稿 v1;标题继承选题标题;资产引用为空 | +| 9 | P3 → P4 | 引用一条资产去创作 | `Asset` → 当前内容的资产引用 | `assetId` | P4 把该资产挂进当前内容的资产引用 | 资产引用区列出该条 | +| 10 | P4 → P5 | 成稿态,去发布 | `ContentVersion` → `PublishTask` | `contentId` + `versionIds` | P5 创建发布任务 | 各版本按 `versionIds` 载入,检查结果待跑 | + +🔴 第 8 条治的是现状 `B8`:上一版只写「把一条选题转入创作」,③段于是只改了选题状态就跳页,创作台显示的还是写死的上一条。契约写死「创建或切换当前 `Content`」,对面就没法糊弄。 + +### 第二类 · 上下文定位(只带定位用的 ID,目标页自己去查) + +| # | 来源 → 目标 | 触发 | 传递对象(定位用) | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 1 | P1 → P2 | 点「异常值提示」里某条,或从今日待处理挑到选题类待办 | `Benchmark` 的线索 | `benchmarkId` + `filter=异常值` | P2 用 `filter` 筛对标内容,用 `benchmarkId` 定位那一条 | 列表已按筛选值过滤,停在对应那条 | +| 2 | P1 → P4 | 今日待处理里有「在写」的内容 | `Content` | `contentId` | P4 切换当前内容 | 创作流程停在该内容当前环节 | +| 3 | P1 → P5 | 今日待处理里有待审/待确认的 | `PublishTask` | `publishTaskId` | P5 载入该任务 | 停在该任务的检查与确认位 | +| 4 | P1 → P6 | 点账号矩阵里某个账号 | `Account` | `accountId` | P6 载入该账号 | 画像六维填充该账号的值 | +| 5 | P1 → P7 | 今日待处理里有待复盘的 | `Review` | `accountId`(如有 `reviewId` 一并带) | **P7 自己按 `accountId` 查出该账号的待复盘项与表现数据** | 待复盘项定位于该账号 | +| 6 | P1 → P7 | 今日待处理里有待核销的 | `PublishRecord` | `recordId` | P7 载入该条记录,对账核对区停在该条 | 对账核对区停在该条记录 | +| 11 | P4 → P6 | 需要查这个账号的口径 | `Account` | `accountId` | P6 载入该账号 | 画像六维填充该账号的值 | +| 12 | P5 → P6 | 发布前要核账号口径 | `Account` | `accountId` | 同第 11 条 | 同第 11 条 | +| 15 | P6 → P4 | 画像保存后回到创作 | `Account`(回程) | `accountId`,如来时带了 `contentId` 一并带回 | P4 保持或切换当前内容 | 来时带了 `contentId` 则回到它,否则当前内容不变 | +| 16 | P6 → P5 | 画像保存后回到发布 | `Account`(回程) | `accountId`,如来时带了 `publishTaskId` 一并带回 | P5 保持当前任务 | 任务不变 | +| 18 | P7 → P5 | 从一条记录回到它对应的版本 | `PublishRecord` → `ContentVersion` | `recordId`(由它解析出 `versionIds`) | P5 载入这些版本 | 各版本定位于该记录当时用的那一版 | + +🔴 第 5 条治的是现状 `B9`:上一版写「点账号矩阵里的某个账号 → P7」,③段把被点账号放进了页面临时状态,而 P7 根本不读它,看的是待复盘表默认那一条。契约写死「传 `accountId`,P7 自己查」,就把这条路堵上了。 + +### 第三类 · 状态完成(下游这一步做完,上游那个对象的状态才算走完) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 13 | P5 → P7 | 已发布,去复盘 | `PublishRecord` → `Review` | `recordId` + `accountId` | P7 为该记录建一条待复盘项 | 待复盘项多出这一条,表现数据取该记录用的版本 | +| 14 | P5 → P7 | 发布后去查留痕 | `PublishTask` → `PublishRecord` | `publishTaskId` | P7 载入刚产生的那条记录 | 发布记录列表多出这一条并停在它上面 | +| 17 | P7 → P6 | 归因回写 | `Review` → `Account` 的记忆 | `accountId` + `reviewId` | P6 往该账号追加一条记忆条目 | 记忆条目多出一条,长期记忆数 +1 | + +🔴 第 13 条治的是现状 `C1`:上一版写的 P5 → P7,是 18 条里唯一一条界面上找不到任何入口的。本版把它列进 P0 必须通的四条之一(见下)。 +🔴 第 14 条治的是现状 `B1`:③段「确认发布」只写了个内存标志加一句提示,P8 的记录表永远不会多出这一条。契约写死「目标页载入刚产生的那条记录」,对面就得真落一条。 + +### 两条新增的流转(标「新增·待确认」,见 §十) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 19 | P7 → P1 | 复盘结论确认后,回到矩阵 | `Review` → 由它刷新的 `Performance` 汇总 | `accountId`(可选) | P1 用该结论刷新异常值提示/今日待处理/本月表现最好的一条 | 对应板块多出这一条 | +| 20 | P7 → P2 | 复盘发现转下一轮选题 | `Review` → `Topic` | `reviewId` | P2 以该结论为来源建一条草稿选题 | 选题库「待做」多出一条,来源标该复盘 | + +**为什么这两条单列**:第①棒逐条盘点的 18 条里没有它们,它们是 GPT 新加的,代表「复盘反哺」那一段闭环。不写进去,闭环在文档上就是断的,第④步做界面对不上;写进去却不标,等于偷偷扩范围。所以:写进去,标出来。 + +### 优先级:哪几条必须先通 + +主链的第一段是 `Topic → Content → ContentVersion → PublishTask → PublishRecord → Review`。落在流转上,**P0 必须先通的是四条**: + +1. 第 8 条 P2 → P4(选题 → 内容) +2. 第 10 条 P4 → P5(成稿 → 发布任务) +3. 第 14 条 P5 → P7(发布 → 发布记录) +4. 第 13 条 P5 → P7(发布记录 → 待复盘) + +后做的(重要,但不卡主生产链):第 1、2、3、4、5、6、9、11、12、15、16、18 条。第 19、20 条等 §十 第 3 项定完再排。 + +--- + +## 七、骨架受限的两处(依赖未复核项,沿用) + +1. **P1 的形态挂在待复核第 5 条上**(矩阵级视图是否真需要)。若答「不需要」,P1 降为单账号今日,矩阵列表下移。这是一处**结构性分支**,③段动工前必须定。 +2. **P7 的第 10 板块「商单与收支」挂在待复核第 6 条与 A3 上**(商单对账进不进第一版;收支口径)。若「不进第一版」,P7 的这半只留第 7、8、9 板块(原 P8 的第 1、2、3 块)。 + +**回收三字段**:复核人 = 主会话转用户;复核时机 = ②段收口时一次性过,③段动工前必须定;结论落点 = 本文件 §七 与 §五 P1、P7 对应板块。 + +--- + +## 八、五样给全核对(方法论要求,缺一样③段就没方向) + +| 要求 | 本份落在哪 | 齐 | +|---|---|---| +| 页面清单(有哪几页,每页一句话说清干什么) | §五 七页,每页第一段 | ✅ | +| 页面流转(谁跳到谁、什么条件下) | §六 20 条,每条六要素 + 三条总规则 + P0 四条 | ✅ | +| 每页板块清单与排列(几个块、从上到下什么顺序) | §五 每页「业务板块清单(从上到下)」,逐页编号 | ✅ | +| 每页主操作(唯一那个推进动作) | §五 每页「主操作」 | ✅ | +| 每条信息的分档(主屏常驻/可点入,含判据回答) | §五 每页「信息分档」表 | ✅ | +| 页型一句 | §二 | ✅ | +| 导航结构(几项、各项指向哪页、顺序) | §三 | ✅ | + +--- + +## 九、与上一版(V2)的实质差别(逐条) + +**页集合与导航** + +1、**页数由八页收成七页**。P8 记录与对账**整页撤销**,四个板块原样接入 P7,导航里不再单列。判据是「页集合里没有 P8」,不是「把 P8 改个名」(§五 P7)。 +2、**导航由「三组 + 一个跨组入口」压成一层七项**:首页/选题/创作/投放/复盘/账号/**资产(排最后)**。零组标、零跨组、零第二层。上一版的三组标题与跨组入口全部去掉(§三)。 +3、**导航项名与页的对应写死**:首页→P1、选题→P2、创作→P4、投放→P5、复盘→P7、账号→P6、资产→P3。这不只是顺序表,是「点哪一项到哪一页」的判据(§三)。 +4、**P5 在导航里显示为「投放」**。它仍是发布中心,页内写清只管内容发布与排期。**改名不扩功能** —— 上一版叫「发布」,本版只换显示名与归属说明。 +5、**P6 不再是「跨组入口」**(跨组这个概念随分组一起去掉),它就是一层的第六项「账号」。 + +**功能与板块的对应** + +6、**新增「功能 ↔ 板块」一一对应关系,并写进可机检位置**。上一版只声明「功能按使用场景组织」,没有逐块落点;本版给每页每个板块标出它承担哪条功能,且自检里双向查(无悬空功能、无孤立板块)——对应关系从此可机检,不靠人读(§五,原型 `FN_HOME`/`FN_MAP` 与自检 5b-3)。 +7、**P7 由 6 块变 10 块**:前 6 块是复盘,后 4 块是搬来的记录与对账(发布记录/单条溯源/对账核对区/商单与收支)。 + +**流转与冻结** + +8、**流转契约目标页的三处改动**:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)目标页由 P8 改指 **P7**;第 18 条(记录 → P5)来源页由 P8 改指 **P7**。条数仍 20,六要素契约本身一字未动(§六)。 +9、**骨架冻结表由「八页 39 块」改成「七页 39 块」**。页结构与板块归属的判据同步改,冻结照旧逐页逐位比对(§四、§五)。 + +**数字** + +10、**业务板块总数不变,仍是 39**。P7 从 6 块变 10 块(+4),P8 整页撤掉(−4),六页不变 ⇒ 净变化 0。 + +--- + +### 附:V2 相对 V1 的实质差别(沿用存档,⛔ 本版未动) + +**结构层** + +1、**新增「页面公共框架」一节(§四)**,给出四样内容与三条硬规则。V1 完全没有这一层,③段的页壳因此成了文档外的黑户(现状 `A1`)。 +2、**撤销各页的「功能入口」板块**(V1 的③段长出来、②段没写的那一层)。撤销之后入口回到所属业务板块或全局可达位置。依据:它的文字就是流转表的副本(现状 `A2`)。 +3、**骨架冻结升级成对象冻结**(§四+§七)。V1 只写「③段不许新增、移动、删除板块」,没定义「什么算板块」;V2 把判据从「有没有套统一板块的样式」换成「有没有一个明确的业务对象」,并写明新增业务能力必须先进 `2a` 功能清单、完成对象归属。 +4、**每页新增两栏:核心对象、不应该负责**。V1 只有「职责+板块」。 +5、**流转从「一句话」改成六要素契约(§六)**,20 条逐条写全,并按对象传递/上下文定位/状态完成三类分开。V1 只有「从哪到哪、什么条件下」两列。 +6、**新增流转优先级:P0 四条**(§六末)。 + +**页面与板块层** + +7、**P4:「当前内容标识」从业务板块上移进公共框架**,改名「当前内容上下文」。 +8、**P4:新增板块「录制卡片与画板」**,落 F14。 +9、**P4:新增板块「版本管理」承担 F7 与 F8**。 +10、**P5:第 2 板块改名「各版本与逐版编辑」**,只消费 P4 生成的版本,⛔ 不再负责展开。 +11、**P5:第 5 板块从「发布记录入口」改成「发布记录」**。 +12、**P6:写死「画像六维是一块,不是六块」**。 +13、**P7:写死「确认与改判是回写的前置开关」**。 +14、**P1:第 5 板块从「全局检索与随手记入口」改成「全局检索」**,随手记移到公共框架的全局可达位置。 + +**数字与核对层** + +15、**V2 重数业务板块总数=39 块**,并订正第①棒 §四 A1 的加总差错(原文写 38,自给的 `5+5+4+6+5+4+6+4` 等于 39)。 +16、**零视觉词红线照旧**,全文无配色/字体/间距/组件样式/动效,也无「卡片」「按钮」「标签」这类形态词。 +17、**V2 相对 V1 一页没删、主操作一页没改。** ⚠️ 本版(V3)**推翻了这一条** —— 本版删了 P8 整页(见本 §九 第 1 条),这是用户口径要求的改动。 + +--- + +## 十、待与用户确认项 + +派活单要求:「部分采纳」那三条涉及改②段结构的,先按 GPT 的方向落地,再在文末单列。以下是本份范围内的全部待确认项。 + +**1、导航项的显示名与侧栏短名怎么对齐** +本版把导航压成一层七项(首页/选题/创作/投放/复盘/账号/资产),按用户口径定的名字。V2 那套「三组+跨组」的组名问题随分组一起去掉,不再是问题。**新冒出来的一个问号**:网页 App 的侧栏是窄的,七项如果都用全名(如「首页」「选题」「创作」等)宽度够,但要不要另配一套两字短名(如「复盘台」缩成「复盘」「账号画像」缩成「账号」),得先问 —— 现在⑦段用的是用户口径的全名,没另起一套短名。 +为什么不自决:起短名等于顺手加一套命名口径,属于改口径,不是执行细节。 + +**2、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 主张合成一份、九节。本版的处置是**内容照收、形态不收**:九节要的东西全部落进了 `2a`+`2b` 两份(详见 `2a-产品功能-新版.md` §九 第 1 项)。 +为什么不自决:合成会新增文档层,属于扩大可见面。 + +**3、两条新增流转(§六 第 19、20 条)要不要进②段** +写进去了,但每条都标了「新增·待确认」。理由与处置见 §六 那一段。 +为什么不自决:新增流转是扩范围。 + +**4、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳**三分类**,六型没进正文。 +为什么不自决:GPT 没把六型和这 20 条逐条对齐,直接搬进来会在同一件事上造出第二份定义。要进得先把 20 条逐条归型。 + +**5、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上(§七)。 + +**6、一条计数订正请顺手认一下** +§九第 15 条(存档段):第①棒写「八页共 38 个板块」,实际加总是 39;V2 重数为 39,页数由八变七、P8 四块并入 P7 之后,**总数仍是 39**(搬位置,不增减)。这条不是要用户拍板,只是请核一下按哪个数往下走。 +⚠️ 与旧版不同:这次**页数由八变七**,但**板块总数仍是 39**(P8 四块搬进 P7,只是换了页)。 + +**回收三字段**(本份全部待确认项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3、4 条要赶在第④步动界面之前定 +- 结论落点 = 本文件 §十 与 `2a-产品功能-新版.md` §九 + +--- + +## 附:本份自检 + +- [x] 七页,每页有核心对象、不应该负责、公共框架含什么、业务板块清单与顺序、主操作、信息分档(含判据回答) +- [x] 页面公共框架被显式定义,且写明不算板块数、不参与功能归属、不占冻结计数 +- [x] 每页的业务板块清单里没有公共框架那四样(框架与板块彻底分开) +- [x] 导航一层七项,项名与顺序照用户口径(首页/选题/创作/投放/复盘/账号/资产),零组标、零跨组、零第二层 +- [x] 每一页每个板块都标出它承担哪条功能,双向无悬空、无孤立(可机检:原型 `FN_HOME`/`FN_MAP` + 自检 5b-3) +- [x] 流转 20 条,每条六要素齐全;18 条沿用②段原条目,2 条新增并标注 +- [x] 流转按三类分开;P0 四条单列 +- [x] ③段现在实现不了的四处(`B1`/`B8`/`B9`/`C1`)在契约里都有对应写法 +- [x] 零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现;未用「卡片」「按钮」「标签」这类形态词 +- [x] 未写功能条目的有无与优先级(那是 `2a`),未描述页面「长什么样」 +- [x] 业务板块总数写明(39 块,与八页版同数),并订正了第①棒的一处加总差错 +- [x] 骨架受限的两处标出来源(待复核第 5、6 条与 A3),带回收三字段 +- [x] 对象冻结声明写明确:新增业务能力必须先进 `2a` 功能清单并完成对象归属 +- [x] §九 逐条列出与上一版(V2)的实质差别(10 条)+ V2 相对 V1 的存档(17 条) +- [x] §十 单列了全部待确认项的处置与理由 +- [x] 未新增②段两份之外的文档;上游文件全部只读使用 + +*(说人话自评:45/50 直接性 9 / 节奏 8 / 信任度 9 / 真实性 10 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__72111e.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__72111e.md new file mode 100644 index 0000000..8cf385a --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__72111e.md @@ -0,0 +1,130 @@ +# 界面布局(2b) + +> 项目:`proto-board`|更新:2026-10-07|性质:页面骨架 +> 口径依据:`stage-requirements/SKILL.md`(②—③交界:②段钉骨架、③段做皮肉)+ `create-prd.md` §二(布局五样、信息承载分档、页型一句)。 +> 改版说明:2026-10-07 重写 —— 补页型判定、每页一句话、流转条件,并把信息分档的判据逐条答出来。与上一版的实质差别见文末。 + +**这份只管骨架:有哪几页、每页几个板块、板块怎么排、页与页怎么跳、每条信息放在哪一档。** 配色、字体、间距、组件样式、动效一个字都不写 —— 那是③段。功能条目的有无与优先级是 `2a-产品功能.md` 的事,本份不碰。 + +## 一、页型判定 + +**工具型页面。** 依据:用户每次进来是把一件事干完(贴需求、等生成、回头看旧版),不是看一眼就下决心买什么;产品定位里也没有营销或售卖这一层(1a A6)。 + +判型只写这一句。⛔ 不写「用哪个骨架」「哪个区块」—— 那是③段按设计方向定的事。 + +这一句为什么必须写:③段的版式供给偏落地页向。不说页型,③段就会套错骨架,做出「一行小字 + 大标题 + 一行灰字」那种样子 —— 判据全绿,但一看就不是工作台。 + +## 二、页面清单 + +三页,由 1a A8 定死,不加不减。 + +1. **项目列表页** —— 进门那一页。看自己开过哪些项目,以及新建一个。 +2. **版本列表页** —— 某个项目里面的样子。看这个项目开过几版、每版什么状态,以及新建一版。 +3. **版本工作台页** —— 干活的那一页。左边贴需求和点生成,右边看它进行到哪一步、结果是什么。 + +## 三、页面流转 + +- 项目列表 →(点某个项目的行)→ 版本列表。 +- 版本列表 →(点某个版本的行)→ 版本工作台。 +- 版本工作台 →(点面包屑上的项目名)→ 回到版本列表;→(点面包屑的根)→ 回到项目列表。 +- 新建项目这个动作发生在项目列表页的操作行;新建版本发生在版本列表页的操作行 —— 两处都不跳页,就地建完回到同一页的列表里。 +- 三页共用一个顶栏(左产品名、右当前位置),所以无论跳到哪一页,都看得见自己在哪、怎么退回去。 + +流转条件只有「点哪一行去哪一页」,没有隐藏入口,也没有需要满足前置条件才放行的跳转。 + +## 四、每页的板块与排列 + +灰块粒度:只讲有哪些块、从上到下怎么排,不讲长什么样。 + +### 页 1 · 项目列表 + +1. 顶栏:左边是产品名,右边是「当前位置:根」。 +2. 操作行:左边是「项目」这个标题,右边是新建项目的主操作。 +3. 项目列表:一行一个项目,每行是项目名 + 版本数 + 最近更新时间 + 一个「进去」的指示。 + +主操作:新建项目(在操作行右侧)。次一级的动作是点整行进项目 —— 整行可点,不另设按钮。 + +空态:一个项目都没有时,列表区换成新建引导(一句话 + 新建项目的主操作),不摆一张空表格。 + +### 页 2 · 版本列表 + +1. 顶栏:左边是产品名,右边是面包屑「项目名」。 +2. 操作行:左边是这个项目的名字(当标题用),右边是新建版本的主操作。 +3. 版本列表:一行一个版本,每行是版本名 + 状态 + 最近更新时间 + 一个「进去」的指示。 + +主操作:新建版本(在操作行右侧)。次一级是点整行进工作台。 + +空态:这个项目还没开过版本时,列表区换成新建引导。 + +### 页 3 · 版本工作台 + +1. 顶栏:左边是产品名,右边是面包屑「项目名 / 版本名」。 +2. 主工作区,左右两栏(窄屏上下堆叠): + - 左栏是需求输入区:需求文本框、上传入口(只认 `.md` / `.txt`)、生成主操作,外加一个演示用的「模拟失败」入口。 + - 右栏是状态与产物区,按当前状态换内容:`draft` 显示提示语;`running` 显示步骤日志;`failed` 显示失败原因加重试;`done` 显示产物预览加重新生成。 + +主操作:生成(需求非空、且不在 `running` 时可用);失败态下变成重试;已生成态下变成重新生成。 + +## 五、信息承载分档 + +判据只有一条:**删掉它,主操作还做得成吗。** 答「做得成」的,只能进「可点入」。不许拿「能读到」「将来可能需要」当理由把它留在主屏。 + +| 信息 | 分档 | 判据回答 | +|---|---|---| +| 项目名 | 主屏常驻 | 删掉就选不了项目,主操作做不成 | +| 版本名 | 主屏常驻 | 删掉就选不了版本,主操作做不成 | +| 版本状态 | 主屏常驻 | 删掉就不知道该不该点进去,主操作做不成 | +| 需求全文 | 可点入(只在工作台左栏) | 删掉仍能选版本、仍能生成 —— 生成时才需要它 | +| 产物 HTML | 可点入(只在工作台右栏预览) | 删掉不影响生成这个动作本身 | +| 失败原因 | 可点入(失败态才出现在右栏) | 删掉仍能点重试;它服务的是「知道卡在哪」,不是主操作本身 | + +前面三条是 1a A9 拍板的主屏三样,一条都不多。需求全文与产物都走「点进去看」。 + +## 六、窄屏怎么变 + +只写布局怎么动,不写视觉。 + +- 三页顶栏收成一行,面包屑用「/」紧凑排开。 +- 页 3 的左右两栏改上下堆叠:输入区在上,状态与产物区在下。 +- 列表行在窄屏仍是单行一条,需要时把版本数、更新时间折到下一行,但不丢信息。 + +## 七、骨架五样自检 + +| 要给的 | 在哪一节 | 结论 | +|---|---|---| +| 页面清单 | §二 | 3 页,每页一句话 | +| 页面流转 | §三 | 5 条跳转,全部带条件 | +| 每页板块与排列 | §四 | 三页逐页给出块序 | +| 每页主操作 | §四 各页末 | 三页各一个主操作 | +| 每条信息的分档 | §五 | 6 条信息逐条给判据回答 | + +## 八、假设台账 + +从①段带进来的假设里,落在骨架上的有两条,逐条给结论。 + +| 假设 | 本份的结论 | 归宿 | +|---|---|---| +| B10 空态用引导替代空表格 | 页 1、页 2 的空态照此写 | ③ 已按假设落地(影响面:无。回退口径:改成空表格要回②段改本份) | +| B9 生成过程可视 + 占位产物 | 页 3 右栏 `running` 一段写成步骤日志,不是一根进度条 | ③ 已按假设落地(影响面:`running` 这段要有位置承载多条步骤。回退口径:只换这一块内容,骨架不动) | + +依据假设得出的骨架点已带上状态标注(见页 3 右栏与两处空态)。⛔ 全文零视觉词。 + +## 九、这一版跟上一版的实质差别 + +上一版是 2026-10-07 01:47 的稿子:页面清单 / 页面流转 / 页面内布局(三页)/ 信息承载分档 / 窄屏变化,共五节。这一版: + +1. **补了页型判定(§一)**。上一版完全没有这一节,而 `create-prd.md` 明写「页型一句(仍需写)」,并给了理由:不说页型,③段会套错骨架。这是上一版最实的一处漏。 +2. **页面清单从只有页名改成页名 + 一句话说清每页干什么**。上一版页名后面跟的是「(入口)」「(=项目详情,由 B1 命名)」这类注,是结构说明不是职责说明。 +3. **页面流转补上条件与返回路径**。上一版写了「点行 → 跳转」和面包屑回退,但没写「新建动作发生在哪一页、建完停在哪」,也没说这些跳转不需要前置条件。 +4. **每个板块标了序**。上一版页 1、页 2 的板块是编号列,页 3 是缩进散列;这一版三页统一按从上到下的序号排,且把「顶栏」明确写进每页第 1 块。 +5. **信息承载分档补上「失败原因」一条**(上一版只有 4 条),并把判据回答写全 —— 上一版有判据回答,但用的是「删掉它主操作还做得成吗」这一句当标题、下面对每条给的是结论式短语,没把「为什么做得成 / 做不成」说清。 +6. **主操作从三处散写收成每页末一行**。上一版在页面内布局里写了「主操作」,又在信息分档里重述了一遍状态与预览的位置,同一件事写了两遍。本版按「同一件事只写一遍」收敛。 +7. **新增 §七骨架五样自检表**,把方法论要求的五样逐条对账,上一版没有这一层对账。 +8. **新增 §八假设台账**。上一版完全没有继承①段的假设 —— `2a` 里带了假设标注,`2b` 一个字没有,同一个段里两份文档两种做法。 +9. 删掉了上一版文末那句「(判据:删掉它主操作还做得成吗)」的重复标题。 + +## 十、说人话评分 + +已过内容准则(`humanizer` / `humanizer-zh`),评分 **46/50**:直接性 10、节奏 9、信任度 9、真实性 9、精炼度 9。 + +扣分处:§四三页的板块列都是「几号 + 名词」的短条目,节奏偏平;§五判据回答列为了对齐写法,六行结构接近。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__d85687.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__d85687.md new file mode 100644 index 0000000..5797a14 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__d85687.md @@ -0,0 +1,323 @@ +# 2b 界面布局 + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 2 子步,产出 `prd/2b-界面布局.md` +> 判据源:`stage-requirements/SKILL.md` §2b + `assets/diagram-design/`(本份只给灰块骨架,不出图) +> 本份专管界面骨架:有哪几页、每页几个板块、板块怎么排、跨页怎么跳。⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能.md`)。 +> ⛔ **全文零视觉词**:配色 / 字体 / 间距 / 组件样式(含卡片、按钮、标签这类具体形态) / 动效,一个都不许出现。本份只说「有哪些块、什么顺序」。 +> 🔴 **交给③段时骨架是冻结的**:③段不许新增、移动、删除板块。缺板块要回②段改。 + +--- + +## 〇、上游状态 + +| 上游 | 状态 | +|---|---| +| ②段 `2a-产品功能.md` | ✅ 已就位(14 条功能,六字段齐全) | +| ①段 `1e-使用场景.md` | ✅ 已就位(八条用户故事) | +| ①段 1a 的 9 条待复核 + A1–A4 | 🔴 **未经用户确认**。本份受它们影响的只有两处,已就地标出(见 §二 P1 与 §四) | +| 1b 竞品分析 | ✅ 已就位,跨项目。本份引用两处:Easel 发布中心的多平台直证、Easel 创作流水线的环节顺序 | + +**分档判据的读法(先说清,全篇一致)**:「删掉它,主操作还做得成吗」按**结果正确**读 —— 缺了它会把事情做错,等于没做成,那就归「主屏常驻」。这是本份对方法论的读法,写在这里以免后面逐条重复解释。 + +--- + +## 一、页型(一句判型 + 依据) + +**本产品是工具型页面,不是营销页。** + +依据:`1a-需求文档.md` §一 与 §四 里的用户是天天来干活的 MCN 团队(内容负责人、编导与文案、剪辑与投放),不是第一次来的访客。§八 留下的三个入口全是干活入口(找选题 / 走创作流水线 / 看矩阵复盘),没有一处是「让人下决心」的落地页。 + +⇒ ③段不要套落地页骨架。判据:本产品的每一页都有人在里面完成一件事,没有一页是为了让人「看一眼就下决心」而存在的。 + +--- + +## 二、八页骨架 + +### P1 矩阵总览(一级组:看矩阵复盘) + +**这一页干什么**:一屏回答每个账号今天该发什么、发了什么、效果如何。 + +**板块清单(从上到下)** + +1. 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +2. 账号矩阵 —— 每个账号今日该发什么 / 已发什么 / 效果如何 + ⛔ 本块**不写怎么呈现**(矩阵、列表、卡片都是形态,归③段判,见 `layouts-tooling.md` §0) +3. 异常值提示 —— 最近哪些内容的数据异动 +4. 本月表现最好的一条 +5. 全局检索与随手记入口 + +**主操作**:决定今天先处理哪一件事,并进到那一件事。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 账号矩阵 | 主屏常驻 | 删掉它,主操作的对象就没了 —— 不知道有哪些账号,无从决定先处理哪件 | +| 今日待处理 | 主屏常驻 | 删掉它,主操作没有候选可挑,做不成 | +| 异常值提示 | 可点入 | 删掉它,主操作仍做得成(异常值是 P2 的输入,不是这一页的决策依据) | +| 本月表现最好 | 可点入 | 删掉它,主操作完全不受影响 —— 它只是激励 | +| 随手记入口 | 可点入 | 判据答「做得成」。⚠️ 但它是 F2 的入口,以**全局可达**的方式出现:任意页面一次点击内能碰到,不占 P1 的主屏常驻位 | + +🔴 本页依赖 **A1**(账号数 10–50)与**待复核第 5 条**(矩阵级视图是否真需要)。若第 5 条复核为「不需要」,P1 从「矩阵总览」降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换。 + +--- + +### P2 选题雷达(一级组:找选题) + +**这一页干什么**:找选题,并且把选中的那条推进下一步。 + +**板块清单(从上到下)** + +1. 对标监控概览 —— 四个数:在监控的账号数 / 低粉爆款条数 / 异常值条数 / 近三天更新条数 +2. 对标内容 —— 每条带它相对该账号平时水平的倍数(⛔ 同 P1,不写呈现) +3. 评论区洞察(可点入子区)—— 取评论、出 AI 候选选题(`2a` F3) +4. 选题库 —— 分「待做 / 在写 / 已用」三组 +5. 灵感速记入口 + +**主操作**:把一条选题推进下一步(去创作台,或去资产库拆解)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 对标内容 | 主屏常驻 | 删掉它,主操作的对象没了,做不成 | +| 选题库 | 主屏常驻 | 删掉它,主操作没有可推进的条目,做不成 | +| 对标监控概览四数 | 主屏常驻 | 删掉它,看不出哪个账号值得看 —— 列表会长到没法挑,等于主操作做不成 | +| 评论区洞察 | 可点入 | 删掉它,仍能从对标列表拿到选题 | +| 灵感速记入口 | 可点入 | 同 P1 的随手记,全局可达 | + +--- + +### P3 资产库(一级组:找选题) + +**这一页干什么**:把拆解结果存下来,下次能直接拿到。 + +**板块清单(从上到下)** + +1. 分区切换 —— 角度 / 结构 / 开场白 / 标题,一次看一个 +2. 资产条目 —— 当前分区下的条目(⛔ 不写呈现) +3. 单条详情 —— 原文、出处、(草稿标记) +4. 引用入口 —— 把这条拿去创作台用 + +**主操作**:把一条拆解结果入库;已入库的则把它引用到创作台。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 分区切换 | 主屏常驻 | 删掉它,四个分区分不开,入库不知道该进哪一区,主操作做不成 | +| 资产条目 | 主屏常驻 | 主操作对象 | +| 单条详情(原文 / 出处) | 可点入 | 删掉它,入库与引用都还做得成(入库门禁在守卫层,不靠这里显示) | +| 引用入口 | 可点入 | 删掉它,`2a` F4 的主路径改成从创作台来找,多绕一步;但 P3 自己的主操作(入库)不受影响 | + +--- + +### P4 创作台(一级组:走创作流水线) + +**这一页干什么**:一条内容从选题走到成稿。 + +**板块清单(从上到下)** + +1. 当前内容标识 —— 这是哪条选题 +2. 环节进度 —— 七个环节的当前位置,可回退 +3. 当前环节工作区 —— 这一步实际干活的地方 +4. AI 产出与采纳 —— 当前环节的 AI 产出(生成中 / 已生成 / 失败重试)+ 采纳·驳回·改后再用 +5. 资产引用区 —— 从资产库拿角度、结构、开场白、标题 +6. 版本列表(可点入) + +**主操作**:把当前环节推进到下一环节。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 环节进度 | 主屏常驻 | 删掉它,不知道下一环节是什么,主操作做不成 | +| 当前环节工作区 | 主屏常驻 | 主操作的对象 | +| AI 产出与采纳 | 主屏常驻 | 删掉它,当前环节的产出无处看、无处采纳 ⇒ 推进到下一环节做不成(`2a` 的 AI 状态流转已有,落位在此) | +| 当前内容标识 | 主屏常驻 | 删掉它,改到别的选题上也不知道,等于做错 | +| 资产引用区 | 可点入 | 删掉它,仍能凭空写(这正是 S2 要治的老毛病),主操作本身做得成 | +| 版本列表 | 可点入 | 删掉它,推进流程不受影响;只有回溯旧版时才需要 | + +--- + +### P5 发布中心(一级组:走创作流水线) + +**这一页干什么**:把成稿展开成各账号各平台的版本,过闸,由人确认发出。 + +**板块清单(从上到下)** + +1. 目标选择 —— 这次发给哪些账号、哪些平台 +2. 各版本预览与逐版编辑 —— 一个目标一版 +3. 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +4. 确认发布 —— 含二次确认 +5. 发布记录入口(可点入) + +**主操作**:确认发布。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 检查结果 | 主屏常驻 | 删掉它,会被硬拦项挡回去却不知道为什么,主操作做不成 | +| 各版本预览与逐版编辑 | 主屏常驻 | 主操作对象 | +| 确认发布 | 主屏常驻 | 删掉它就没有主操作本身了 | +| 目标选择 | 可点入 | 判据答「做得成」—— 从 P4 带着版本进来时,目标已定;只有从 P1 直接进来才需要现选 | +| 发布记录入口 | 可点入 | 删掉它,回查改从 P8 进 | + +--- + +### P6 账号画像(跨组) + +**这一页干什么**:每个账号一份画像与记忆,看和改都在这一页。 + +**板块清单(从上到下)** + +1. 账号列表 —— 选一个账号 +2. 画像六维 —— 定位、风格、受众、平台、偏好与红线、长期记忆 +3. 记忆条目 —— 只追加,不覆盖 +4. 关联内容 —— 这个账号做过的内容 + +**主操作**:保存这一份画像。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 画像六维 | 主屏常驻 | 主操作对象 | +| 账号列表 | 主屏常驻 | 删掉它,不知道在改哪个账号的画像,会改错 | +| 记忆条目 | 可点入 | 删掉它,编辑画像与保存都做得成(记忆是回写产物,不是编辑动作的输入) | +| 关联内容 | 可点入 | 删掉它,主操作不受影响 | + +--- + +### P7 复盘台(一级组:看矩阵复盘) + +**这一页干什么**:把一条已发布内容的表现读回来,写成这个账号的经验。 + +**板块清单(从上到下)** + +1. 待复盘项 +2. 这一条的表现数据 +3. 归因结论(由 AI 给出,可编辑) +4. 确认与改判 —— 采纳、驳回或改后再用 +5. 回写目标提示 —— 这次回写到哪个账号 +6. 历史复盘(可点入) + +**主操作**:确认归因并回写。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 表现数据 | 主屏常驻 | 删掉它,归因没有依据,主操作做不成 | +| 归因结论(可编辑) | 主屏常驻 | 主操作对象 | +| 确认与改判 | 主屏常驻 | 删掉它,结论没有采纳或驳回 ⇒ 回写没有依据,等于主操作没做成 | +| 待复盘项 | 主屏常驻 | 删掉它,不知道有什么可复盘,主操作做不成 | +| 回写目标提示 | 主屏常驻 | 删掉它,回写会落到错的账号,这条经验就废了 —— 等于主操作没做成 | +| 历史复盘 | 可点入 | 删掉它,当前这次复盘仍做得成 | + +--- + +### P8 记录与对账(一级组:看矩阵复盘) + +**这一页干什么**:查发布留痕,核商单与收支对不对得上。 + +**板块清单(从上到下)** + +1. 发布记录 —— 谁在什么时候确认发的、发的是哪一版(⛔ 不写呈现) +2. 单条溯源 —— 从记录回到内容与版本 +3. 对账核对区 —— 内容、发布记录、收支三样对得上 +4. 商单与收支(可点入,所属功能 F12 为 P2,第一版可能没有) + +**主操作**:核销一条记录。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 发布记录 | 主屏常驻 | 知道有哪些记录,不知道就无从核销。判据:删掉它,主操作没有对象 | +| 对账核对区 | 主屏常驻 | 主操作对象 | +| 单条溯源 | 可点入 | 判据答「做得成」—— 核销看列表就够;要深究才点进溯源 | +| 商单与收支 | 可点入 | 删掉它,主操作仍做得成;且 F12 是 P2,第一版可能整块没有(见 `2a` §五 的暂缓项) | + +--- + +## 三、页面流转 + +**门开在哪**:唯一入口是 P1。四个一级组是导航结构,不是四个入口。 + +**一级导航三组 + 一个跨组入口**(照 `1a` §八 的三个入口): + +| 组 | 含哪几页 | +|---|---| +| 找选题 | P2 选题雷达、P3 资产库 | +| 走创作流水线 | P4 创作台、P5 发布中心 | +| 看矩阵复盘 | P1 矩阵总览、P7 复盘台、P8 记录与对账 | +| (跨组)账号画像 | P6 —— 从 P1、P4、P5 都能进 | + +**页与页怎么连** + +| 从 | 到 | 什么条件下 | +|---|---|---| +| P1 | P2 | 点「异常值提示」里的某条,或从今日待处理里挑到选题类待办 | +| P1 | P4 | 今日待处理里有「在写」的内容 | +| P1 | P5 | 今日待处理里有待审 / 待确认的内容 | +| P1 | P6 | 点账号矩阵里的某个账号 | +| P1 | P7 | 今日待处理里有待复盘的 | +| P1 | P8 | 今日待处理里有待核销的 | +| P2 | P3 | 对某条对标内容发起拆解 | +| P2 | P4 | 把一条选题转入创作 | +| P3 | P4 | 引用一条资产去创作 | +| P4 | P5 | 成稿态,去发布 | +| P4 | P6 | 需要查这个账号的口径 | +| P5 | P6 | 发布前要核账号口径 | +| P5 | P7 | 已发布,去复盘 | +| P5 | P8 | 发布后去查留痕 | +| P6 | P4 | 画像保存后回到创作 | +| P6 | P5 | 画像保存后回到发布 | +| P7 | P6 | 归因回写(写进该账号的画像) | +| P8 | P5 | 从一条记录回到它对应的版本 | + +**两条跨页规则**(`2a` 里已写、在骨架里落地的): + +1. **F7 的多版本跨 P4 与 P5**:在 P4 出成稿,在 P5 展开并逐版确认。所以 P5 才需要「目标选择」这个板块。 +2. **F13 的留痕跨 P5 与 P8**:确认动作发生在 P5,记录可查在 P8。 + +**全局可达**:随手记出现在任意页面一次点击内(F2 是 P0,不能埋在两层下)。 + +--- + +## 四、骨架受限的两处(依赖未复核项) + +1. **P1 的形态挂在待复核第 5 条上**(矩阵级视图是否真需要)。若答「不需要」,P1 降为单账号今日,矩阵列表下移。这是一处**结构性分支**,③段动工前必须定。 +2. **P8 的第 4 板块挂在待复核第 6 条与 A3 上**(商单对账进不进第一版;收支口径)。若「不进第一版」,P8 只留第 1、2、3 板块。 + +**回收三字段**:复核人 = 主会话转用户;复核时机 = ②段收口时一次性过,③段动工前必须定;结论落点 = 本文件 §四 与 §二 P1、P8 对应板块。 + +--- + +## 五、五样给全核对(方法论要求,缺一样③段就没方向) + +| 要求 | 本份落在哪 | 齐 | +|---|---|---| +| 页面清单(有哪几页,每页一句话说清干什么) | §二 八页,每页第一行 | ✅ | +| 页面流转(谁跳到谁、什么条件下) | §三 表 + 两条跨页规则 + 二级导航 | ✅ | +| 每页板块清单与排列(几个块、从上到下什么顺序) | §二 每页「板块清单(从上到下)」,逐页编号 | ✅ | +| 每页主操作(唯一那个推进动作) | §二 每页「主操作」 | ✅ | +| 每条信息的分档(主屏常驻 / 可点入,含判据回答) | §二 每页「信息分档」表 | ✅ | +| 页型一句 | §一 | ✅ | + +--- + +## 附:本份自检 + +- [x] 八页,每页有板块清单与排列顺序、主操作、信息分档(含判据回答) +- [x] 页面流转写了「谁跳到谁、什么条件下」,并说明了门开在哪 +- [x] 零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现(已回避「卡片」「按钮」「标签」这类具体形态词) +- [x] 未写功能条目的有无与优先级(那是 `2a`),未描述页面「长什么样」 +- [x] 骨架受限的两处已标出来源(待复核第 5、6 条与 A3),并带回收三字段 +- [x] 上游状态写在文首;引用 1b 处标了证据等级 +- [x] 明确的骨架冻结声明:③段不许新增、移动、删除板块 +- [x] 未新增②段两份之外的文档 + +*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__旧归档prd-V4-52KB-20261010.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__旧归档prd-V4-52KB-20261010.md new file mode 100644 index 0000000..3c22277 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/2b-界面布局__旧归档prd-V4-52KB-20261010.md @@ -0,0 +1,618 @@ +# 2b 界面布局(新版 V4) + +> 项目 slug:`mcn-shortvideo-agent` | ②段第 2 子步,产出 `prd/2b-界面布局.md` +> 本版在 V3 基础上**把用户 2026-10-09~10 的八条口径落到骨架与板块上**(选题库分类、资产入库不限页、投放页两级目标选择、账号页拆「画像五维 + 平台账号」、复盘页写死平铺)。 +> V3 本身是在 V2 基础上按用户口径改导航与页面归属(导航一层七项、P8 并入复盘、功能与板块一一对应)。 +> 上游决策见 `GPT-规划意见与采纳决策.md`(2026-10-08 23:54,采纳 24/部分采纳 3/不采纳 1)与 V2/V3 稿。V4 的口径原文:`用户口径裁决-5条回应.md`(2026-10-09)、`用户口径追加-账号是两个概念.md`(2026-10-10)。 +> 只读输入:①棒 `产品规划/现状梳理-板块·功能·操作路线.md`、②棒 GPT 意见与采纳决策、V2 版 `2b-界面布局-新版.md`、①段 `1a-需求文档.md` 与 `1e-使用场景.md`。 +> 判据源:`stage-requirements/SKILL.md` §2b + `assets/diagram-design/`(本份只给灰块骨架,不出图)。 +> 本份专管界面骨架:有哪几页、每页几个板块、板块怎么排、跨页带什么过去。⛔ 不写功能条目的有无与优先级(那是 `2a-产品功能-新版.md`)。 +> ⛔ **全文零视觉词** —— 配色 / 字体 / 间距 / 组件样式 / 动效,一个都没出现。本份只说「有哪些块、什么顺序、点它带什么过去」。 + +--- + +## 〇、一屏结论 + +- **页数、导航、流转条数都不动**:仍是七页、一层七项导航、20 条流转契约。**V4 改的是页内的板块构成与四页的板块文案**。 +- 🔴 **业务板块总数不变,仍是 39**:P2 由 5 块收成 4 块(「灵感速记」并进「选题库」,随手记的落点本来就是选题库),P6 由 4 块变 5 块(新增「平台账号」)⇒ 一减一加,**净变化 0**。逐页数见 §五 与 §九。 +- **P2 选题库**:容纳范围放宽成「对选题有帮助的任何信息」,分类用**进度 × 类型**两个正交维度(进度沿用 `待做/在写/已用`;类型是新加的 `选题/对标线索/评论洞察/数据异动/灵感`,各有各的后续动作)。⛔ 不新增「待整理」状态。 +- **P2 对标内容**:拆解结果**可就地入库**(资产库页是统一管理的地方,⛔ 不是唯一入库口)。 +- **P3 资产库**:页面职责由「存拆解结果」改成「**统一管理**资产条目」;⛔ 它不再是唯一入库口。 +- **P5 发布中心**:目标选择改成**两级** —— 先选内容账号,再勾它下面的**平台账号**(渠道)。数据摘要区跟着对齐成「目标渠道数/覆盖平台数」。 +- **P6 账号画像**:板块 2 由「画像六维」改成「**画像五维**」(去掉「平台」这一维);新增板块「**平台账号**」(带平台 + 登录态 + 授权状态)。 +- **P7 复盘台**:10 块**保持平铺、⛔ 不划子区**,并写死它属「**发布之后看数据与看收入**」这一类事。 +- 其余骨架照 V3:页面公共框架(Page Shell)不算板块;每页两栏「核心对象」「不应该负责」保留;「功能 ↔ 板块」仍可机检(原型 `FN_HOME`/`FN_MAP`)。 + +--- + +## 一、这一版骨架改了什么(五件事) + +**1、P6 增加一块「平台账号」,画像那一块由六维收成五维。**(P6 4 → 5 块) +账号按用户口径拆成两个概念:**内容账号**管内容属性(账号设定),**平台账号**是发布渠道。⇒ 「画像六维」去掉「平台」这一维,改成「**画像五维**」(定位/风格/受众/偏好与红线/长期记忆);平台账号单独成一块,列出一个内容账号下面的 N 个平台账号,每条带「平台 + 登录态 + 授权状态」。 +🔴 判据:平台账号自带三个属性和自己的动作(登录/授权/增删),不是画像里的一行值 ⇒ 它够一个板块;而它的核心对象仍是 `Account`,所以**归属页没变**(`2a` §三 F9)。 + +**2、P2 的「灵感速记」并进「选题库」,选题库按两个维度分类。**(P2 5 → 4 块) +用户口径:「选题库里面可以是对选题有帮助的任何信息 分类区分就好」+「随手记仍落选题库」。⇒ 随手记的落点本来就是选题库,⛔ 不必再单列一块。选题库仍是那一个板块,里面用**进度 × 类型**两个正交维度区分:进度沿用 `待做/在写/已用`;类型是新加的 `选题/对标线索/评论洞察/数据异动/灵感`,每类自带后续动作。⛔ 不新增「待整理」状态、⛔ 不做多去向选择。 +🔴 这一条**顺手订正了 V3 遗留的第 4 条**(P2 的板块清单把「灵感速记」列为第 5 块,同页信息分档表又把它标成「全局可达、不占板块」—— 两处打架)⇒ 现在板块清单与分档表一致:**随手记是全局可达的框架层入口(不占板块),它写进来的东西落选题库**。 + +**净计数**:P2 −1、P6 +1 ⇒ **总数仍是 39**。 + +**3、资产入库不限页,资产库页是统一管理的地方。** +用户口径:「所有页面有产生资产都可以 随时入库,资产库页是统一管理的地方」。⇒ P3 的页面职责与主操作由「存拆解结果」改成「**统一管理**」;P2 的「对标内容」块写清拆出来的结果可以**就地入库**(人不必先跑去资产库)。⛔ 资产库页**不再是唯一的入库口**。 +⚠️ 这与「一个对象只有一处产生」不冲突 —— 那一条管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页(`2a` §一 第 4 条)。 + +**4、P5 目标选择改成两级,数据摘要区跟着对齐。** +用户口径:一个内容账号在投放时对应**多个平台账号**、分别投放。⇒ 目标选择先选**内容账号**,再勾它下面的**平台账号**(渠道);摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」。「各版本与逐版编辑」写明**一个平台账号一版**(一版一路)。 + +**5、P7 写死「平铺、不分区」。** +用户口径:「发布的目的就是为了看数据和看收入啊」⇒ 复盘(看数据)与记录对账(看收入)是**同一类事**。本页 10 块**平铺**,⛔ 不划子区、⛔ 不再拆页、⛔ 不加导航项。 + +### 附:V3 那一版骨架改了什么(存档,⛔ 本版未推翻) + +**1、P8 整页并进 P7。** +用户口径逐字:「**P8 放复盘**」「**当然是功能也要放过去**」。P8 记录与对账不再是一页 —— 它的四个板块原样接在 P7 的板块清单后面,导航里也不再单列。判据不是「把 P8 改名」,是**页集合里从此没有 P8**。 + +**2、导航压平成一层的七项。** +用户口径逐字:「**左侧导航应该是 首页 选题 创作 投放 复盘 账号**」「**P3 放导航 排最后**」。V2 里的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组分隔**一起撤掉**;项仍是七项、一项一页,顺序照用户给的先后,资产排最后。 + +**3、功能与板块的对应关系写进可机检的位置。** +用户口径逐字:「**所有功能要和各自板块对应**」。本版把「哪条功能归哪一页的哪些板块」写成一张表(原型里的 `FN_MAP`),归属页写成另一张(`FN_HOME`,逐字取 `2a` §四)。自检两端一起查:功能不得悬空、板块不得孤立、每条功能的每个归属页上都得有它的板块。 + +**4、三处指向 P8 的流转改指 P7。** +流转契约本身(六要素、20 条)不动,只把目标页由 P8 换成 P7:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)、第 18 条(记录 → P5)。第 13 条(P5 → 复盘)本来就指向 P7,不变。 + +--- + +## 二、页型(一句判型 + 依据) + +**本产品是工具型页面,不是营销页。** + +依据:`1a` §一 与 §四 里的用户是天天来干活的 MCN 团队(内容负责人、编导与文案、剪辑与投放),不是第一次来的访客。§八 留下的三个入口全是干活入口,没有一处是「让人下决心」的落地页。 +⇒ ③段不要套落地页骨架。判据:本产品的每一页都有人在里面完成一件事,没有一页是为了让人「看一眼就下决心」而存在的。 + +--- + +## 三、导航结构(一层七项) + +**门开在 P1(导航里叫「首页」)。** 导航是**一层七项** —— ⛔ 没有分组、⛔ 没有跨组分隔、⛔ 没有第二层。 + +| 导航项 | 落哪一页 | +|---|---| +| 首页 | P1 矩阵总览 | +| 选题 | P2 选题雷达 | +| 创作 | P4 创作台 | +| 投放 | P5 发布中心 | +| 复盘 | P7 复盘台(P8 已并入,见 §五) | +| 账号 | P6 账号画像 | +| 资产 | P3 资产库(排最后) | + +**项名与页名是两层,别混。** 导航里的名字照用户口径;页面自己的名字沿用不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。两处对照就是上表 —— 最要紧的一处是 **P5:导航叫「投放」,页面仍叫「发布中心」**,这一页只管内容发布与排期,版本生成在创作台,⛔ 没有扩功能。 + +**顺序是硬约束。** 资产排最后(用户明说);其余六项按用户给的先后(首页 → 选题 → 创作 → 投放 → 复盘 → 账号)。 + +**账号为什么不再标「跨组」。** V2 把它标成跨组,是因为那时有三组可比。三组撤掉之后「跨组」这个标记失去参照物,本版一并去掉;P6 仍是全局上下文能力(不在生产链任何一环上),这一点没变。 + + +--- + +## 四、页面公共框架(Page Shell) + +七页每页都有这一层,四样,从上到下: + +1. **页面标题区** —— 页名,加一句话说清这一页干什么。 +2. **数据摘要区**(可选)—— 本页若干个数的一行摘要。哪页有、摘要哪几个数,由本页需要决定;不是每页都必须有。 +3. **页面操作区** —— 本页的页面级操作。 +4. **辅助入口区** —— 放本页那些不属于任何业务板块、又必须在本页可达的入口。⛔ **不许**用它把 §六 的流转表再写一遍。 + +**三条硬规则**(这是本版新立的,堵的是现状 `A1`/`A3`): + +- 页面公共框架**不计入业务板块数量**,每页的板块清单里不列它。 +- 页面公共框架**不参与功能归属**。功能归属只看核心业务对象(见 `2a-产品功能-新版.md` §一 第 2 条)。 +- 页面公共框架**不占骨架冻结的计数**。冻结冻的是业务板块与对象,不是框架。 + +**一处容易混的地方,写清楚:** P2 的「对标监控概览」在③段里长得和别的页那行数据摘要很像,但它是**业务板块**,不是框架。判据不是「长得像不像」,是「它是不是这一页某个功能的对象」。P2 那四个数是 F1 的产出(在监控的账号数、低粉爆款条数、异常值条数、近三天更新条数),所以它算板块;P1 那行数只是本页概览,不算。形态相似不等于产品对象相同。 + +**全局可达的那一个入口。** 只有「随手记」(F2)放在全局可达的位置:任意页面一次点击内碰得到。它不占任何一页的业务板块位。依据:F2 是 P0,`2a` 与 `1a` §八 都把它当主链的第一跳,不能埋在两层下。 + +--- + +## 五、七页骨架 + +每页写七样:这一页干什么/核心对象/不应该负责/公共框架含什么/业务板块清单(从上到下)/主操作/信息分档。 + +### P1 矩阵总览 + +**这一页干什么**:一屏回答每个账号今天该发什么、发了什么、效果如何。 + +**核心对象**:`Account` 账号、`Performance` 表现数据 +**不应该负责**:内容的深度编辑(那是 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/今日待处理数/数据异动数/本月已发数)+ 页面操作区。 +🔴 上一版③段这两块就是「统计条」,本版归入框架,不算板块。它的「功能入口」那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 今日待处理 —— 跨账号的待办:待审、待确认、待复盘各几件 +2. 账号矩阵 —— 每个账号今日该发什么/已发什么/效果如何 + ⛔ 本块**不写怎么呈现**(矩阵、列表都是形态,归③段判) +3. 异常值提示 —— 最近哪些内容的数据异动 +4. 本月表现最好的一条 +5. 全局检索 + +**主操作**:决定今天先处理哪一件事,并进到那一件事。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 账号矩阵 | 主屏常驻 | 删掉它,主操作的对象就没了 —— 不知道有哪些账号,无从决定先处理哪件 | +| 今日待处理 | 主屏常驻 | 删掉它,主操作没有候选可挑,做不成 | +| 异常值提示 | 可点入 | 删掉它,主操作仍做得成(异常值是 P2 的输入,不是这一页的决策依据) | +| 本月表现最好 | 可点入 | 删掉它,主操作完全不受影响 —— 它只是激励 | +| 全局检索 | 可点入 | 删掉它,主操作做得成;它是本页的一个旁路,不是推进动作的一部分 | +| 随手记 | 全局可达(框架层,不占板块) | 它是 F2 的入口,任意页面一次点击内能碰到 | + +🔴 本页依赖 **A1**(账号数 10–50)与**待复核第 5 条**(矩阵级视图是否真需要)。若第 5 条复核为「不需要」,P1 从「矩阵总览」降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换。 + +--- + +### P2 选题雷达 + +**这一页干什么**:找选题,并且把选中的那条推进下一步。 + +**核心对象**:`Benchmark` 对标号、`Topic` 选题 +**不应该负责**:内容生产(那是 P4) + +**页面公共框架**:页面标题区 + 页面操作区 + 辅助入口区(「开始创作」这一类跳 P4 的动作入口)。 +🔴 上一版③段的功能入口那块**撤销**。本页**没有**数据摘要区 —— 因为这一页那四个数(对标监控概览)本身就是业务板块,属于 F1 的产出。 + +**业务板块清单(从上到下,4 块)** + +1. 对标监控概览 —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数 +2. 对标内容 —— 每条带它相对该账号平时水平的倍数(⛔ 同 P1,不写呈现);拆出来的结果**可就地入库**(人不必先跑去资产库 —— 入库口不限页,见 §一 第 3 条) +3. 评论区洞察(可点入子区)—— 取评论、出 AI 候选选题(`2a` F3) +4. 选题库 —— 装**对选题有帮助的任何信息**,用**进度 × 类型**两个正交维度区分(见下) + +**选题库的两个维度(本版新写清)** + +- **进度**(沿用旧口径):`待做` / `在写` / `已用`。 +- **类型**(本版新加):`选题` / `对标线索` / `评论洞察` / `数据异动` / `灵感`。每类自带后续动作 —— 选题往下推创作、对标线索去拆解、评论洞察回评论区、数据异动去对标的那个账号、灵感可以直接变成选题。 +- 两个维度**正交**:一条信息同时带进度和类型,⛔ 不是二选一。随手记写进来的信息,默认落「**灵感**」这个类型、进度默认「**待做**」。 +- ⛔ 不新增「**待整理**」状态,⛔ 不做「先选去向」这一步 —— 信息落进来就是待做,靠类型区分,不靠人先归档。 + +**主操作**:把一条选题推进下一步(去创作台,或去资产库拆解)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 对标内容 | 主屏常驻 | 删掉它,主操作的对象没了,做不成 | +| 选题库 | 主屏常驻 | 删掉它,主操作没有可推进的条目,做不成 | +| 对标监控概览四数 | 主屏常驻 | 删掉它,看不出哪个账号值得看 —— 列表会长到没法挑,等于主操作做不成 | +| 评论区洞察 | 可点入 | 删掉它,仍能从对标列表拿到选题 | +| 随手记(写进选题库) | 全局可达(框架层,不占板块) | 同 P1 的随手记;它写进来的东西落进「选题库」板块 | + +--- + +### P3 资产库 + +**这一页干什么**:**统一管理**资产条目 —— 归类、查改、引用。资产从哪来不限页:任何页产生资产都可以就地入库,这一页是把资产收拢起来统一管的地方。 + +**核心对象**:`Asset` 资产条目 +**不应该负责**:内容流程(拆解完就走,创作在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(条目总数/已入库/待入库/分区数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,4 块)** + +1. 分区切换 —— 角度/结构/开场白/标题,一次看一个 +2. 资产条目 —— 当前分区下的条目(⛔ 不写呈现) +3. 单条详情 —— 原文、出处、草稿标记 +4. 引用入口 —— 把这条拿去创作台用 + +**主操作**:把一条资产条目管理到位(归好分区、补上出处),需要时引用到创作台。 +🔴 本页**不是唯一的入库口** —— P2 拆解、P4 创作、P3 自己都能就地入库;这一页的职责是**统一管理**,⛔ 不是「必须先到这里才能入库」。这与「一个对象只有一处产生」不冲突:那一条管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页(`2a` §一 第 4 条)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 分区切换 | 主屏常驻 | 删掉它,四个分区分不开,入库不知道该进哪一区,主操作做不成 | +| 资产条目 | 主屏常驻 | 主操作对象 | +| 单条详情(原文/出处) | 可点入 | 删掉它,入库与引用都还做得成(入库门禁在守卫层,不靠这里显示) | +| 引用入口 | 可点入 | 删掉它,`2a` F4 的主路径改成从创作台来找,多绕一步;但 P3 自己的主操作(入库)不受影响 | + +--- + +### P4 创作台 + +**这一页干什么**:一条内容从选题走到成稿,再从成稿展开成**多个平台账号**的版本。 + +**核心对象**:`Content` 内容、`ContentVersion` 内容版本 +**不应该负责**:真正执行发布(那是 P5) + +**页面公共框架**:页面标题区 + **当前内容上下文**(这是哪条选题/当前到哪个环节)+ 数据摘要区(当前环节共几步/已完成环节数/引用资产数/版本数)+ 页面操作区 + 辅助入口区。 +🔴 **「当前内容标识」从板块上移到这里。** 它服务整页,不是某个功能的对象。依据:GPT 的 P4 例(公共框架=当前内容上下文 + 页面级操作),采纳决策 G24。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,6 块)** + +1. 创作流程 —— 七个环节的当前位置,可回退 +2. 当前环节工作区 —— 这一步实际干活的地方 +3. AI 产出与采纳 —— 当前环节的 AI 产出(生成中/已生成/失败重试)+ 采纳·驳回·改后再用 +4. 资产引用 —— 从资产库拿角度、结构、开场白、标题 +5. 版本管理 —— 一稿多版,含母版到**多个平台账号**的展开(展开单位是**平台账号**:一个内容账号下的一个平台账号一版) + 🔴 **本块是 F7 与 F8 的落点。** 上一版把 F7 拆成「P4 出成稿、P5 展开」两头各半,P4 侧连发起入口都没有。本版按 `2a` 的归属把它收回这里:展开与逐版确认发生在 P4,P5 只拿去发。展开单位由 V3 的「账号 × 平台」改成**平台账号**(`2a` F7)。 +6. 录制卡片与画板 —— 成稿态之后,把内容转成对着讲的卡片(`2a` F14) + 🔴 **本块是补上的。** 上一版②段 P4 的板块清单里没有它,而 `1a` §五 S3 的场景、`1a` §六 F14、`1e` §四 的映射里都有它(现状 `D3`:四处不一致)。本版按 `2a` F14 归 P4 的结论把它补进板块清单。它是**成稿之后**的动作,不是创作流程七个环节里的一环 —— 这个区分写在这里,免得③段又把它塞进七步里。 + +**主操作**:把当前环节推进到下一环节。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 创作流程 | 主屏常驻 | 删掉它,不知道下一环节是什么,主操作做不成 | +| 当前环节工作区 | 主屏常驻 | 主操作的对象 | +| AI 产出与采纳 | 主屏常驻 | 删掉它,当前环节的产出无处看、无处采纳 ⇒ 推进到下一环节做不成 | +| 当前内容上下文 | 主屏常驻(框架层,不占板块) | 删掉它,改到别的选题上也不知道,等于做错 | +| 资产引用 | 可点入 | 删掉它,仍能凭空写(这正是 S2 要治的老毛病),主操作本身做得成 | +| 版本管理 | 可点入 | 删掉它,推进流程不受影响;只有回溯旧版或多账号展开时才需要 | +| 录制卡片与画板 | 可点入 | 删掉它,走到成稿并发布仍做得成;它只在想生成卡片时才需要 | + +--- + +### P5 发布中心 + +**这一页干什么**:把成稿过来的版本过闸,由人确认发出。 + +**核心对象**:`PublishTask` 发布任务、`PublishRecord` 发布记录 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(目标渠道数/覆盖平台数/本批版本数/硬拦项数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。它上面原本挂着「创作台」与「记录与对账」两个跳转,这两个跳转纳入 §六 的流转契约(P5→P7 见第 14 条,回创作台走流程)。 + +**业务板块清单(从上到下,5 块)** + +1. 目标选择 —— **两级**:先选**内容账号**,再勾它下面的**平台账号**(渠道),决定这批版本投到哪几个渠道 +2. 各版本与逐版编辑 —— **一个平台账号一版**(一版一路) +3. 检查结果 —— 哪几处会被硬拦、哪几处只是提醒 +4. 确认发布 —— 含二次确认 +5. 发布记录 —— 这批发了什么,可查随发布记录一起留的检查结果 + +🔴 **两级目标选择的判据(本版新写清)**:一个**内容账号**在投放时对应**多个平台账号**、分别投放 ⇒ 目标不是「选账号 + 选平台」两个独立动作,是**顺着内容账号往下勾它的平台账号**(`2a` §二 对象字典「平台账号」)。摘要区的「目标渠道数」= 勾中的平台账号数,「覆盖平台数」= 这些渠道落在几个平台。 +🔴 **「一版一路」**:一个**平台账号**(渠道)只对应一个版本 ⇒ 勾了 N 个平台账号就要有 N 版。发布记录**不加渠道字段**:一版一路时,从版本就能反推出渠道(`2a` F13)。 + +**主操作**:确认发布。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 检查结果 | 主屏常驻 | 删掉它,会被硬拦项挡回去却不知道为什么,主操作做不成 | +| 各版本与逐版编辑 | 主屏常驻 | 主操作对象 | +| 确认发布 | 主屏常驻 | 删掉它就没有主操作本身了 | +| 目标选择 | 可点入 | 判据答「做得成」—— 从 P4 带着版本进来时,目标已定;只有从 P1 直接进来才需要现选 | +| 发布记录 | 可点入 | 删掉它,回查改从 P7 进 | + +--- + +### P6 账号画像(导航里的第六项「账号」) + +**这一页干什么**:每个**内容账号**一份画像与记忆;它下面挂着 N 个**平台账号**(发布渠道)。看和改都在这一页。 + +**核心对象**:`Account` 账号(=内容账号;平台账号是它下面的子项,不另立对象) +**不应该负责**:独立业务流程(它只提供上下文,不在生产链上) + +**页面公共框架**:页面标题区 + 数据摘要区(在管账号数/已建画像数/长期记忆条数/关联选题数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,5 块)** + +1. 账号列表 —— 选一个内容账号 +2. 画像五维 —— 定位、风格、受众、偏好与红线、长期记忆 +3. 平台账号 —— 这个内容账号下面的 N 个平台账号,每条带「平台 + 登录态 + 授权状态」 +4. 记忆条目 —— 只追加,不覆盖 +5. 关联内容 —— 这个内容账号做过的内容 + +**主操作**:保存这一份画像。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 画像五维 | 主屏常驻 | 主操作对象 | +| 账号列表 | 主屏常驻 | 删掉它,不知道在改哪个账号的画像,会改错 | +| 平台账号 | 可点入 | 删掉它,编辑与保存画像都做得成;它在要管这个账号的发布渠道(登录/授权/增删)时才需要 | +| 记忆条目 | 可点入 | 删掉它,编辑画像与保存都做得成(记忆是回写产物,不是编辑动作的输入) | +| 关联内容 | 可点入 | 删掉它,主操作不受影响 | + +⚠️ **画像五维是一块,不是五块。** 现状里它在界面上被拆成五个输入位加一行只读提示,那是③段的实现选择,不等于它是两个板块。本份只声明它是**一个业务板块**。 + +🔴 **账号是两个概念,这里说清**:**内容账号**管**内容属性**(账号设定:定位/风格/受众/偏好红线/长期记忆),**平台不归它**;**平台账号**是**发布的渠道**(带平台 + 登录态 + 授权状态)。两者是**一个内容账号 → N 个平台账号**(子项清单),**不是两个并列的对象**,⛔ 不给平台账号单独立对象(`2a` §二 对象字典「平台账号」)。⇒ 本页的归属页没变,核心对象仍是 `Account`。 + +--- + +### P7 复盘台(原 P8 记录与对账整页并入本页) + +**这一页干什么**:把一条已发布内容的表现读回来,写成这个账号的经验;同一页上还能查发布留痕、核商单与收支。 + +**核心对象**:`Review` 复盘结论(原料是 `Performance` 表现数据);本页后半还有 `PublishRecord` 发布记录与 `Campaign/Order` 商单与收支 +**不应该负责**:内容创作、版本生成(都在 P4) + +**页面公共框架**:页面标题区 + 数据摘要区(待复盘数/数据已回数/本次已回写数/画像记忆数/记录总数/待结算数)+ 页面操作区。 +🔴 上一版③段的功能入口那块**撤销**。 + +**业务板块清单(从上到下,10 块 · 平铺,⛔ 不划子区)** + +1. 待复盘项 +2. 这一条的表现数据 +3. 归因结论(由 AI 给出,可编辑) +4. 确认与改判 —— 采纳、驳回或改后再用 +5. 回写目标提示 —— 这次回写到哪个账号 +6. 历史复盘(可点入) +7. 发布记录 —— 谁在什么时候确认发的、发的是哪一版(⛔ 不写呈现;原 P8 整页搬来,⛔ 不是新做,是搬位置) +8. 单条溯源 —— 从记录回到内容与版本 +9. 对账核对区 —— 内容、发布记录、收支三样对得上 +10. 商单与收支(可点入,所属功能 F12 标 `P2/Deferred`,第一版可能没有) + +🔴 **这 10 块平铺,⛔ 不划子区、⛔ 页内不分段。** 前 6 块(复盘)与后 4 块(记录与对账)是**同一类事** —— 都属「**发布之后看数据与看收入**」:复盘那半看数据,记录与对账那半看收入。用户口径逐字:「发布的目的就是为了看数据和看收入啊」。⇒ ⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分区(GPT 主张把记录与对账拆出去,本版不采纳)。 + +**主操作**:确认归因并回写(复盘那半);核销一条记录(记录与对账那半)。 + +**信息分档** + +| 信息 | 档 | 判据回答 | +|---|---|---| +| 表现数据 | 主屏常驻 | 删掉它,归因没有依据,主操作做不成 | +| 归因结论(可编辑) | 主屏常驻 | 主操作对象 | +| 确认与改判 | 主屏常驻 | 删掉它,结论没有采纳或驳回 ⇒ 回写没有依据,等于主操作没做成 | +| 待复盘项 | 主屏常驻 | 删掉它,不知道有什么可复盘,主操作做不成 | +| 回写目标提示 | 主屏常驻 | 删掉它,回写会落到错的账号,这条经验就废了 —— 等于主操作没做成 | +| 历史复盘 | 可点入 | 删掉它,当前这次复盘仍做得成 | +| 发布记录 | 主屏常驻 | 知道有哪些记录,不知道就无从核销。判据:删掉它,核销没有对象 | +| 对账核对区 | 主屏常驻 | 核销这个主操作的对象 | +| 单条溯源 | 可点入 | 判据答「做得成」—— 核销看列表就够;要深究才点进溯源 | +| 商单与收支 | 可点入 | 删掉它,核销仍做得成;且 F12 标 `Deferred`,第一版可能整块没有(见 `2a` §三 F12 与 §六 依赖表) | + +**一句要写死的话**:第 4 块「确认与改判」**是回写的前置开关**,不是只留痕。没有人工裁决,回写这一步不成立。依据 `2a` F10 的状态流转;③段现在按「只留痕」实现(现状 `D2`),要改。 + +**另一句要写死的话**:第 7–10 这四块是**从 P8 搬过来的同一批板块**,内容一字不改。判据不是「P7 多了四个新板块」,是**页集合里再也没有 P8 这一页**(见 §七 第 2 条)。 + +--- + +## 六、页面流转契约(20 条) + +**每条写六样**:来源页面/触发动作/传递对象/对象 ID(含必要上下文)/目标页面接收方式/目标页面落地状态。 + +**每条至少带一个业务对象或它的 ID。** 光写「从哪到哪」没有工程价值 —— 上一版 18 条里 14 条就是这么写的,现状里它们要么不带东西、要么带了过去对面不读。 + +**三条总规则**(与 `2a` §一 第 3 条同源,此处是它在骨架上的落地):跨页只传 ID 加必要上下文,不传页面临时状态;一个对象只有一处产生;目标页接到 ID 必须能自己恢复出状态。 + +### 第一类 · 对象传递(上游产出对象,下游拿它新建或更新) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 7 | P2 → P3 | 对某条对标内容发起拆解 | 对标内容 → `Asset` 的原料 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 | 分区切到对应区,详情显示该内容的原文与出处 | +| 8 | P2 → P4 | 把一条选题转入创作 | `Topic` → `Content` | `topicId` | P4 **创建或切换当前 `Content`** | 当前内容=该选题;新建草稿 v1;标题继承选题标题;资产引用为空 | +| 9 | P3 → P4 | 引用一条资产去创作 | `Asset` → 当前内容的资产引用 | `assetId` | P4 把该资产挂进当前内容的资产引用 | 资产引用区列出该条 | +| 10 | P4 → P5 | 成稿态,去发布 | `ContentVersion` → `PublishTask` | `contentId` + `versionIds` | P5 创建发布任务 | 各版本按 `versionIds` 载入,检查结果待跑 | + +🔴 第 8 条治的是现状 `B8`:上一版只写「把一条选题转入创作」,③段于是只改了选题状态就跳页,创作台显示的还是写死的上一条。契约写死「创建或切换当前 `Content`」,对面就没法糊弄。 + +### 第二类 · 上下文定位(只带定位用的 ID,目标页自己去查) + +| # | 来源 → 目标 | 触发 | 传递对象(定位用) | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 1 | P1 → P2 | 点「异常值提示」里某条,或从今日待处理挑到选题类待办 | `Benchmark` 的线索 | `benchmarkId` + `filter=异常值` | P2 用 `filter` 筛对标内容,用 `benchmarkId` 定位那一条 | 列表已按筛选值过滤,停在对应那条 | +| 2 | P1 → P4 | 今日待处理里有「在写」的内容 | `Content` | `contentId` | P4 切换当前内容 | 创作流程停在该内容当前环节 | +| 3 | P1 → P5 | 今日待处理里有待审/待确认的 | `PublishTask` | `publishTaskId` | P5 载入该任务 | 停在该任务的检查与确认位 | +| 4 | P1 → P6 | 点账号矩阵里某个账号 | `Account` | `accountId` | P6 载入该账号 | 画像五维填充该账号的值 | +| 5 | P1 → P7 | 今日待处理里有待复盘的 | `Review` | `accountId`(如有 `reviewId` 一并带) | **P7 自己按 `accountId` 查出该账号的待复盘项与表现数据** | 待复盘项定位于该账号 | +| 6 | P1 → P7 | 今日待处理里有待核销的 | `PublishRecord` | `recordId` | P7 载入该条记录,对账核对区停在该条 | 对账核对区停在该条记录 | +| 11 | P4 → P6 | 需要查这个账号的口径 | `Account` | `accountId` | P6 载入该账号 | 画像五维填充该账号的值 | +| 12 | P5 → P6 | 发布前要核账号口径 | `Account` | `accountId` | 同第 11 条 | 同第 11 条 | +| 15 | P6 → P4 | 画像保存后回到创作 | `Account`(回程) | `accountId`,如来时带了 `contentId` 一并带回 | P4 保持或切换当前内容 | 来时带了 `contentId` 则回到它,否则当前内容不变 | +| 16 | P6 → P5 | 画像保存后回到发布 | `Account`(回程) | `accountId`,如来时带了 `publishTaskId` 一并带回 | P5 保持当前任务 | 任务不变 | +| 18 | P7 → P5 | 从一条记录回到它对应的版本 | `PublishRecord` → `ContentVersion` | `recordId`(由它解析出 `versionIds`) | P5 载入这些版本 | 各版本定位于该记录当时用的那一版 | + +🔴 第 5 条治的是现状 `B9`:上一版写「点账号矩阵里的某个账号 → P7」,③段把被点账号放进了页面临时状态,而 P7 根本不读它,看的是待复盘表默认那一条。契约写死「传 `accountId`,P7 自己查」,就把这条路堵上了。 + +### 第三类 · 状态完成(下游这一步做完,上游那个对象的状态才算走完) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 13 | P5 → P7 | 已发布,去复盘 | `PublishRecord` → `Review` | `recordId` + `accountId` | P7 为该记录建一条待复盘项 | 待复盘项多出这一条,表现数据取该记录用的版本 | +| 14 | P5 → P7 | 发布后去查留痕 | `PublishTask` → `PublishRecord` | `publishTaskId` | P7 载入刚产生的那条记录 | 发布记录列表多出这一条并停在它上面 | +| 17 | P7 → P6 | 归因回写 | `Review` → `Account` 的记忆 | `accountId` + `reviewId` | P6 往该账号追加一条记忆条目 | 记忆条目多出一条,长期记忆数 +1 | + +🔴 第 13 条治的是现状 `C1`:上一版写的 P5 → P7,是 18 条里唯一一条界面上找不到任何入口的。本版把它列进 P0 必须通的四条之一(见下)。 +🔴 第 14 条治的是现状 `B1`:③段「确认发布」只写了个内存标志加一句提示,P8 的记录表永远不会多出这一条。契约写死「目标页载入刚产生的那条记录」,对面就得真落一条。 + +### 两条新增的流转(标「新增·待确认」,见 §十) + +| # | 来源 → 目标 | 触发 | 传递对象 | 对象 ID + 上下文 | 目标接收方式 | 落地状态 | +|---|---|---|---|---|---|---| +| 19 | P7 → P1 | 复盘结论确认后,回到矩阵 | `Review` → 由它刷新的 `Performance` 汇总 | `accountId`(可选) | P1 用该结论刷新异常值提示/今日待处理/本月表现最好的一条 | 对应板块多出这一条 | +| 20 | P7 → P2 | 复盘发现转下一轮选题 | `Review` → `Topic` | `reviewId` | P2 以该结论为来源建一条草稿选题 | 选题库「待做」多出一条,来源标该复盘 | + +**为什么这两条单列**:第①棒逐条盘点的 18 条里没有它们,它们是 GPT 新加的,代表「复盘反哺」那一段闭环。不写进去,闭环在文档上就是断的,第④步做界面对不上;写进去却不标,等于偷偷扩范围。所以:写进去,标出来。 + +### 优先级:哪几条必须先通 + +主链的第一段是 `Topic → Content → ContentVersion → PublishTask → PublishRecord → Review`。落在流转上,**P0 必须先通的是四条**: + +1. 第 8 条 P2 → P4(选题 → 内容) +2. 第 10 条 P4 → P5(成稿 → 发布任务) +3. 第 14 条 P5 → P7(发布 → 发布记录) +4. 第 13 条 P5 → P7(发布记录 → 待复盘) + +后做的(重要,但不卡主生产链):第 1、2、3、4、5、6、9、11、12、15、16、18 条。第 19、20 条等 §十 第 3 项定完再排。 + +--- + +## 七、骨架受限的两处(依赖未复核项,沿用) + +1. **P1 的形态挂在待复核第 5 条上**(矩阵级视图是否真需要)。若答「不需要」,P1 降为单账号今日,矩阵列表下移。这是一处**结构性分支**,③段动工前必须定。 +2. **P7 的第 10 板块「商单与收支」挂在待复核第 6 条与 A3 上**(商单对账进不进第一版;收支口径)。若「不进第一版」,P7 的这半只留第 7、8、9 板块(原 P8 的第 1、2、3 块)。 + +**回收三字段**:复核人 = 主会话转用户;复核时机 = ②段收口时一次性过,③段动工前必须定;结论落点 = 本文件 §七 与 §五 P1、P7 对应板块。 + +--- + +## 八、五样给全核对(方法论要求,缺一样③段就没方向) + +| 要求 | 本份落在哪 | 齐 | +|---|---|---| +| 页面清单(有哪几页,每页一句话说清干什么) | §五 七页,每页第一段 | ✅ | +| 页面流转(谁跳到谁、什么条件下) | §六 20 条,每条六要素 + 三条总规则 + P0 四条 | ✅ | +| 每页板块清单与排列(几个块、从上到下什么顺序) | §五 每页「业务板块清单(从上到下)」,逐页编号 | ✅ | +| 每页主操作(唯一那个推进动作) | §五 每页「主操作」 | ✅ | +| 每条信息的分档(主屏常驻/可点入,含判据回答) | §五 每页「信息分档」表 | ✅ | +| 页型一句 | §二 | ✅ | +| 导航结构(几项、各项指向哪页、顺序) | §三 | ✅ | + +--- + +## 九、与上一版(V3)的实质差别(逐条) + +**八条口径的落地** + +1、**功能归属判据换成「一类事情放同一个页面」**(`2a` §一 第 2 条)。落到骨架上,**七页集合与 P1–P7 的板块归属一页没动** —— 用新判据把七页复核了一遍,归属全部成立。改的是判据文字,不是页结构(§一 第 2 条)。 +2、**资产入库不限页,资产库页改成「统一管理」**(P3 §五)。P3 的页面职责由「存拆解结果」改成「统一管理资产条目」,主操作跟着改;P2 的「对标内容」块写明拆解结果**可就地入库**。⛔ P3 不再是唯一入库口。本页板块仍是 4 块,总数不变。 +3、**P2 选题库改用「进度 × 类型」两个正交维度**(P2 §五)。进度沿用 `待做/在写/已用`,类型新加 `选题/对标线索/评论洞察/数据异动/灵感`,每类自带后续动作。⛔ 不新增「待整理」状态、⛔ 不做「先选去向」。 +4、**P2 的「灵感速记」并进「选题库」**(P2 5 → 4 块)。顺手订正 V3 遗留:同一页的板块清单与信息分档表对「灵感速记」写法打架 —— 现在统一成「随手记是全局可达的框架层入口(不占板块),写进来的东西落选题库」。 +5、**P5 目标选择改成两级**(P5 §五 第 1 块):先选内容账号,再勾它下面的**平台账号**(渠道)。数据摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」。 +6、**P5 第 2 块写死「一个平台账号一版」(一版一路)**(P5 §五 第 2 块)。依据 `2a` F13;`PublishRecord` 不加渠道字段。 +7、**P6 画像六维收成五维**(去掉「平台」这一维),**新增「平台账号」板块**(P6 4 → 5 块)。平台账号=发布渠道,每条带「平台 + 登录态 + 授权状态」,是内容账号下的子项清单(1 → N),⛔ 不另立对象。 +8、**P7 写死「平铺、不划子区」**(P7 §五)。10 块属「发布之后看数据与看收入」同一类事,⛔ 不拆页、⛔ 不加导航项、⛔ 页内不分区。 + +**数字** + +9、**业务板块总数不变,仍是 39**:P2 由 5 块收成 4 块(−1),P6 由 4 块变 5 块(+1),其余五页不变 ⇒ 净变化 0。七页页数与 20 条流转契约都不动。(逐页数:5/4/4/6/5/5/10。) + +--- + +### 附:V3 相对 V2 的实质差别(存档,⛔ 本版未推翻) + +**页集合与导航** + +1、**页数由八页收成七页**。P8 记录与对账**整页撤销**,四个板块原样接入 P7,导航里不再单列。判据是「页集合里没有 P8」,不是「把 P8 改个名」(§五 P7)。 +2、**导航由「三组 + 一个跨组入口」压成一层七项**:首页/选题/创作/投放/复盘/账号/**资产(排最后)**。零组标、零跨组、零第二层。上一版的三组标题与跨组入口全部去掉(§三)。 +3、**导航项名与页的对应写死**:首页→P1、选题→P2、创作→P4、投放→P5、复盘→P7、账号→P6、资产→P3。这不只是顺序表,是「点哪一项到哪一页」的判据(§三)。 +4、**P5 在导航里显示为「投放」**。它仍是发布中心,页内写清只管内容发布与排期。**改名不扩功能** —— 上一版叫「发布」,本版只换显示名与归属说明。 +5、**P6 不再是「跨组入口」**(跨组这个概念随分组一起去掉),它就是一层的第六项「账号」。 + +**功能与板块的对应** + +6、**新增「功能 ↔ 板块」一一对应关系,并写进可机检位置**。上一版只声明「功能按使用场景组织」,没有逐块落点;本版给每页每个板块标出它承担哪条功能,且自检里双向查(无悬空功能、无孤立板块)——对应关系从此可机检,不靠人读(§五,原型 `FN_HOME`/`FN_MAP` 与自检 5b-3)。 +7、**P7 由 6 块变 10 块**:前 6 块是复盘,后 4 块是搬来的记录与对账(发布记录/单条溯源/对账核对区/商单与收支)。 + +**流转与冻结** + +8、**流转契约目标页的三处改动**:第 6 条(P1 → 记录)、第 14 条(P5 → 记录)目标页由 P8 改指 **P7**;第 18 条(记录 → P5)来源页由 P8 改指 **P7**。条数仍 20,六要素契约本身一字未动(§六)。 +9、**骨架冻结表由「八页 39 块」改成「七页 39 块」**。页结构与板块归属的判据同步改,冻结照旧逐页逐位比对(§四、§五)。 + +**数字** + +10、**业务板块总数不变,仍是 39**。P7 从 6 块变 10 块(+4),P8 整页撤掉(−4),六页不变 ⇒ 净变化 0。 + +--- + +### 附:V2 相对 V1 的实质差别(沿用存档,⛔ 本版未动) + +**结构层** + +1、**新增「页面公共框架」一节(§四)**,给出四样内容与三条硬规则。V1 完全没有这一层,③段的页壳因此成了文档外的黑户(现状 `A1`)。 +2、**撤销各页的「功能入口」板块**(V1 的③段长出来、②段没写的那一层)。撤销之后入口回到所属业务板块或全局可达位置。依据:它的文字就是流转表的副本(现状 `A2`)。 +3、**骨架冻结升级成对象冻结**(§四+§七)。V1 只写「③段不许新增、移动、删除板块」,没定义「什么算板块」;V2 把判据从「有没有套统一板块的样式」换成「有没有一个明确的业务对象」,并写明新增业务能力必须先进 `2a` 功能清单、完成对象归属。 +4、**每页新增两栏:核心对象、不应该负责**。V1 只有「职责+板块」。 +5、**流转从「一句话」改成六要素契约(§六)**,20 条逐条写全,并按对象传递/上下文定位/状态完成三类分开。V1 只有「从哪到哪、什么条件下」两列。 +6、**新增流转优先级:P0 四条**(§六末)。 + +**页面与板块层** + +7、**P4:「当前内容标识」从业务板块上移进公共框架**,改名「当前内容上下文」。 +8、**P4:新增板块「录制卡片与画板」**,落 F14。 +9、**P4:新增板块「版本管理」承担 F7 与 F8**。 +10、**P5:第 2 板块改名「各版本与逐版编辑」**,只消费 P4 生成的版本,⛔ 不再负责展开。 +11、**P5:第 5 板块从「发布记录入口」改成「发布记录」**。 +12、**P6:写死「画像六维是一块,不是六块」**。 +13、**P7:写死「确认与改判是回写的前置开关」**。 +14、**P1:第 5 板块从「全局检索与随手记入口」改成「全局检索」**,随手记移到公共框架的全局可达位置。 + +**数字与核对层** + +15、**V2 重数业务板块总数=39 块**,并订正第①棒 §四 A1 的加总差错(原文写 38,自给的 `5+5+4+6+5+4+6+4` 等于 39)。 +16、**零视觉词红线照旧**,全文无配色/字体/间距/组件样式/动效,也无「卡片」「按钮」「标签」这类形态词。 +17、**V2 相对 V1 一页没删、主操作一页没改。** ⚠️ 本版(V3)**推翻了这一条** —— 本版删了 P8 整页(见本 §九 第 1 条),这是用户口径要求的改动。 + +--- + +## 十、待与用户确认项 + +派活单要求:「部分采纳」那三条涉及改②段结构的,先按 GPT 的方向落地,再在文末单列。以下是本份范围内的全部待确认项。 + +**1、导航项的显示名与侧栏短名怎么对齐** +本版把导航压成一层七项(首页/选题/创作/投放/复盘/账号/资产),按用户口径定的名字。V2 那套「三组+跨组」的组名问题随分组一起去掉,不再是问题。**新冒出来的一个问号**:网页 App 的侧栏是窄的,七项如果都用全名(如「首页」「选题」「创作」等)宽度够,但要不要另配一套两字短名(如「复盘台」缩成「复盘」「账号画像」缩成「账号」),得先问 —— 现在⑦段用的是用户口径的全名,没另起一套短名。 +为什么不自决:起短名等于顺手加一套命名口径,属于改口径,不是执行细节。 + +**2、②段要不要并成一份九节的「产品架构基线 V2」** +GPT 主张合成一份、九节。本版的处置是**内容照收、形态不收**:九节要的东西全部落进了 `2a`+`2b` 两份(详见 `2a-产品功能-新版.md` §九 第 1 项)。 +为什么不自决:合成会新增文档层,属于扩大可见面。 + +**3、两条新增流转(§六 第 19、20 条)要不要进②段** +写进去了,但每条都标了「新增·待确认」。理由与处置见 §六 那一段。 +为什么不自决:新增流转是扩范围。 + +**4、六种流转类型(T1–T6)要不要进正文** +GPT 给了 Create/Open/Continue/Publish/Review/Trace 六型。本版只采纳**三分类**,六型没进正文。 +为什么不自决:GPT 没把六型和这 20 条逐条对齐,直接搬进来会在同一件事上造出第二份定义。要进得先把 20 条逐条归型。 + +**5、1a 的 9 条待复核 + A1–A4 仍未确认** +沿用上一版遗留(现状 `E2`)。P1 的形态挂在第 5 条上,P7 第 10 板块(商单与收支)挂在第 6 条与 A3 上(§七)。 + +**6、一条计数订正请顺手认一下** +§九第 15 条(存档段):第①棒写「八页共 38 个板块」,实际加总是 39;V2 重数为 39,页数由八变七、P8 四块并入 P7 之后,**总数仍是 39**(搬位置,不增减)。这条不是要用户拍板,只是请核一下按哪个数往下走。 +⚠️ 与旧版不同:这次**页数由八变七**,但**板块总数仍是 39**(P8 四块搬进 P7,只是换了页)。 + +**7、定时发布:挂起(本轮不落)** +用户口径逐字(2026-10-10 07:56):「后续具体做投放功能的时候在说」。⇒ 本轮**不写**定时发布:⛔ 不在 P5 加「定时设置」板块、⛔ 不新增状态、⛔ 不动流转契约。当前只在 `2a`/`2b` 各记一条登记,等真做投放功能时再议。 +- **复核人** = 主会话转用户(真做投放功能时) +- **复核时机** = **立项做投放功能时**(⛔ 不是②段收口) +- **结论落点** = 本文件 §十 与本项 + `2a-产品功能-新版.md` §九 第 7 项;届时定「平台原生定时」还是「本地调度」走哪一条。 + +**回收三字段**(本份第 1–6 项共用): +- 复核人 = 主会话转用户 +- 复核时机 = ②段收口时一次性过;第 3、4 条要赶在第④步动界面之前定(第 7 项不在此列,见上) +- 结论落点 = 本文件 §十 与 `2a-产品功能-新版.md` §九 + +--- + +## 附:本份自检 + +- [x] 七页,每页有核心对象、不应该负责、公共框架含什么、业务板块清单与顺序、主操作、信息分档(含判据回答) +- [x] 页面公共框架被显式定义,且写明不算板块数、不参与功能归属、不占冻结计数 +- [x] 每页的业务板块清单里没有公共框架那四样(框架与板块彻底分开) +- [x] 导航一层七项,项名与顺序照用户口径(首页/选题/创作/投放/复盘/账号/资产),零组标、零跨组、零第二层 +- [x] 每一页每个板块都标出它承担哪条功能,双向无悬空、无孤立(可机检:原型 `FN_HOME`/`FN_MAP` + 自检 5b-3) +- [x] 流转 20 条,每条六要素齐全;18 条沿用②段原条目,2 条新增并标注 +- [x] 流转按三类分开;P0 四条单列 +- [x] ③段现在实现不了的四处(`B1`/`B8`/`B9`/`C1`)在契约里都有对应写法 +- [x] 零视觉词:配色 / 字体 / 间距 / 组件样式 / 动效,一个未出现;未用「卡片」「按钮」「标签」这类形态词 +- [x] 未写功能条目的有无与优先级(那是 `2a`),未描述页面「长什么样」 +- [x] 业务板块总数写明(39 块),并订正了第①棒的一处加总差错;V4 逐页数 5/4/4/6/5/5/10,加总仍是 39 +- [x] P2 选题库写明「进度 × 类型」两个正交维度;⛔ 未新增「待整理」状态、⛔ 未做多去向 +- [x] 资产入库不限页写清,P3 职责改成「统一管理」;与「一个对象只有一处产生」的关系写明 +- [x] P5 目标选择两级(内容账号 → 平台账号)写清;摘要区对齐「目标渠道数/覆盖平台数」;第 2 块写死「一版一路」 +- [x] P6 账号分「内容账号/平台账号」两个概念:画像五维 + 平台账号子项清单;⛔ 未新增独立对象 +- [x] P7 10 块平铺、不划子区,并写明属「发布之后看数据与看收入」一类 +- [x] 定时发布挂起已登记(含回收三字段),本轮未落进骨架 +- [x] 骨架受限的两处标出来源(待复核第 5、6 条与 A3),带回收三字段 +- [x] 对象冻结声明写明确:新增业务能力必须先进 `2a` 功能清单并完成对象归属 +- [x] §九 逐条列出与上一版(V3)的实质差别(9 条)+ V3 相对 V2 的存档(10 条)+ V2 相对 V1 的存档(17 条) +- [x] §十 单列了全部待确认项的处置与理由 +- [x] 未新增②段两份之外的文档;上游文件全部只读使用 + +*(说人话自评:46/50 直接性 10 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 8 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__071c5b.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__071c5b.md new file mode 100644 index 0000000..d43df6e --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__071c5b.md @@ -0,0 +1,289 @@ +# 3b · 实测记录(③段界面交互 · V2) + +> 落点:`执行会话/目标-梳理板块与操作路线,经GPT规划后重做②-071c5b/ui/3b-实测记录.md` +> 判据源:`stage-delivery/SKILL.md` §3b/§供给;`references/execution-runbook.md` §3.5、§5.3;`references/layouts-tooling.md` §1(密度)、§5.5 +> 交付物:`ui/mcn-workbench.html`(单文件自包含原型)+ `ui/DESIGN.md`(绑定规范)+ `ui/_tools/`(8 个可复跑脚本)+ `ui/_gate_shots/`(17 张视口帧) +> 上一版只读对照:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/`(含其 `3b-实测记录.md`,V1 · 84 项判据) + +## 〇、声明制(四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3b 原型**复核补齐** + 实测取证(⛔ 未重做界面;实测未过不进 3c/3d) | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**:视觉与体验的底线判据)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据;只许更严、更具体,⛔ 不许放宽基础层)/ 挡位 **标准** | +| 依据文件 | `ui/DESIGN.md`(本段契约)、`2b-界面布局-新版.md`(冻结骨架 §五)、`2a-产品功能-新版.md`(F1–F14)、`GPT-规划意见与采纳决策.md`(只读) | +| 产出落点 | `ui/mcn-workbench.html`、`ui/DESIGN.md`、`ui/_tools/`(8 个脚本)、`ui/_gate_shots/`(17 张视口帧)、本份 | + +🔴 **本棒只做「验证与上报」,⛔ 没有重做界面。** 原型由 135 041 B / 1 681 行 → **137 555 B / 1 706 行**(md5 `36d92ad6101cf48eb6a778eed339929b`),共动 **4 处**,全部列在 §六(1 处真缺陷 + 1 处假对照 + 1 处自己造成的回归 + 1 处判据过松)。界面骨架、板块、几何**一格未改**(冻结骨架闸门正向 PASS,见 §四)。 + +## 一、怎么复跑(七条命令,全部只读原型) + +```bash +PY="E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" +cd "…/执行会话/目标-梳理板块与操作路线,经GPT规划后重做②-071c5b/ui" + +$PY _tools/check_js.py # ① JS 语法 + 模板里 HTML 注释的反引号 +$PY _tools/check_skeleton.py # ② 骨架冻结(②段原文 ↔ 原型 FROZEN 表) +$PY _tools/run_viewports.py --out-dir _scratch/vp # ③ 16 个视口逐档跑自检、抽密度表 +$PY _tools/mutate_test.py # ④ 变异对照 20 条(证明自检不恒绿) +$PY _tools/run_shots.py # ⑤ 视口帧出片 → _gate_shots/(17 张,见下注) +$PY "E:/ProgramData/.workbuddy/skills/product-planning/scripts/check_naming.py" --ws "E:/ProgramData/AIProject/contentm_agent" # ⑥ 命名一致性 +$PY _tools/tab_close.py # ⑦ 收工清场:关掉本次开的那个标签 +``` + +⚠️ **截图是 17 张,不是脚本末尾印的 18**:`run_shots.py` 拍 **18 次**(P1–P8 在 1440×900 各一张 = 8 次;P1 在 10 个密度断点各一张 = 10 次),但 **`P1-1440` 被算了两次、落到同一个文件名** ⇒ 磁盘上实际 **17 个 PNG**。脚本印的「成功 18 / 共 18」是**拍摄次数**,⛔ 不是文件数。这条是按 `ls _gate_shots | wc -l` 复核出来的(脚本自己的计数和落盘数不是一回事)。 + +**复跑前先探浏览器实例**(本机明令「只连不起」,`skills/browser-harness/SKILL.md`): + +```bash +netstat -ano | grep -E "127\.0\.0\.1:9223 .*LISTENING" # 有 pid = 实例在跑,直接连 +``` + +实例没在跑时 `cap.py` / `grab_selftest.py` **直接报错退出**,⛔ 不会偷偷拉起一个。 + +🔴 **一类任务只开一个标签、全程复用**:换视口走 CDP `Emulation.setDeviceMetricsOverride` 改同一个标签(量完 `clearDeviceMetricsOverride` 还原),⛔ 不 `new_tab()`;标签 id 记在 `_scratch/_bh_tab.txt`。这条纪律是有前车之鉴的(2026-10-09 早上反复开标签把整机拖死),见 §六 第 1 条。 + +`_scratch/` 是中间件(自检全文、视口原文、备份、探针副本),删掉不影响任何结论;交付目录只留 8 个脚本、17 张截图与三份文档。 + +## 二、自检 77 项(1440×900 主视口,PASS 77 / FAIL 0) + +自检是原型自带的:`#/selftest` 在真实场景里逐个点过每个可点元素,量完几何后把结论打进 `#selftest-out`。全文照录,⛔ 不是摘要。 + +```text +自检结果:PASS 77 / FAIL 0 + +PASS 路由 #/p/p1 渲染出 6 个顶层节点 +PASS 路由 #/p/p2 渲染出 6 个顶层节点 +PASS 路由 #/p/p3 渲染出 4 个顶层节点 +PASS 路由 #/p/p4 渲染出 5 个顶层节点 +PASS 路由 #/p/p5 渲染出 5 个顶层节点 +PASS 路由 #/p/p6 渲染出 4 个顶层节点 +PASS 路由 #/p/p7 渲染出 3 个顶层节点 +PASS 路由 #/p/p8 渲染出 3 个顶层节点 +PASS 六态 × 八页 = 48 个组合,全部渲染出内容 +PASS 导航两层:3 个业务组(找选题 / 走创作流水线 / 看矩阵复盘)+ 1 个跨组入口(账号画像 · 跨组),共 8 个功能项,一项一页 +PASS 三个组名逐字取自 ②段 2b §三:找选题 / 走创作流水线 / 看矩阵复盘(跨组=账号画像 · 跨组) +PASS 八页一次点击可达:侧栏 8 个功能项直达(⛔ 本版已撤销「功能入口」那一层,跨页入口只留在侧栏与板块内行级动作) +PASS 清单里每个 ID 都在页面上出现过(89 个,无悬空声明) +PASS 页面上每个 data-act 都在清单里(共 641 次出现,无未登记的可点元素) +PASS 清单里 85 个 ID 都真驱动过并给出可见反馈,0 个死控件(25 个场景,每个实例各重置一次) +PASS 当刻被禁用的控件 4 个(按契约在特定条件下不可点):P4-03, P5-06, P6-03, R-02 +PASS 清单里每个 ID 都至少被驱动过一次(无「从未跑过」的条目) +PASS 侧栏 8 个功能项逐个点过,每一项都落到了自己那一页 +PASS 五处「输入后才可用」的联动都通:其中 5 处在空输入时确实是禁用的 → 输入后转可用 → 点了有反应 +PASS P7「确认与改判」是回写的**前置开关**:未采纳时回写禁用、采纳后转可用(不是只留痕) +PASS 工具型纪律:零 .eyebrow / 零 .lead / 零 .hero +PASS 入场编排不做逐区块:@keyframes 共 0 处 +PASS 骨架冻结:八页 39 个板块的数量与顺序与新版 2b「业务板块清单」逐位一致,⛔ 未增删挪 +PASS 页面公共框架(Page Shell):八页各恰好 1 个,且都不带 .block / 不带 .block-head h2 ⇒ 不计业务板块数、不占冻结计数 +PASS 对象冻结:八页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内(或显式「—」+说明),且与 OBJ_MAP 逐块一致 +PASS 辅助入口区:每页最多 1 个跳转入口 ⇒ ⛔ 没有把流转表在框架层重写一遍 +PASS 「功能入口」那一层已撤销:.sect-nav / .data-card / .data-cards 在八页**逐页**出现 0 次(2b §九第 2 条) +PASS 结构 ①:八页各一个 h1,标题逐级不跳;每个板块都有文字标题 +PASS 结构 ②:字号 12/14/18/20/24px 共 5 档,相邻差 2/4/2/4,正文档 14–16 在用 +PASS 结构 ④:逐页查过,首屏同屏主档按钮 ≤1 个;本页实底按钮 1 种 +PASS 组件口径:八页都没有用内联 style 表达选中态或覆盖字号(选中态走 .is-on / .is-active,字号走 --fs-* 档) +PASS 交互态与可读性::hover / :focus-visible 都在且没被 outline:none 抹掉;tabular-nums、prefers-reduced-motion、防溢出三件套齐全 +PASS 阴影:面板/卡片都用多层叠层,无单层死黑重阴影 +PASS 间距:flex/grid 的 gap 取值全部落在登记刻度内(9 个刻度) +PASS 浮层「随手记」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(R-03) +PASS 浮层「随手记」打开后焦点在层内(当前=X-close) +PASS 浮层「随手记」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「随手记」Esc 能关 +PASS 浮层「随手记」关掉后焦点回到触发件 G-06 +PASS 浮层「随手记」点遮罩能关 +PASS 浮层「两处假设说明」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个 +PASS 浮层「两处假设说明」打开后焦点在层内(当前=X-close) +PASS 浮层「两处假设说明」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「两处假设说明」Esc 能关 +PASS 浮层「两处假设说明」关掉后焦点回到触发件 G-08 +PASS 浮层「两处假设说明」点遮罩能关 +PASS 浮层「资产选择器」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(PICK-CANCEL) +PASS 浮层「资产选择器」打开后焦点在层内(当前=X-close) +PASS 浮层「资产选择器」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「资产选择器」Esc 能关 +PASS 浮层「资产选择器」关掉后焦点回到触发件 P4-04 +PASS 浮层「资产选择器」点遮罩能关 +PASS 浮层「发布二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(P5-10) +PASS 浮层「发布二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「发布二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「发布二次确认」Esc 能关 +PASS 浮层「发布二次确认」关掉后焦点回到触发件 P5-08 +PASS 浮层「发布二次确认」点遮罩能关 +PASS 浮层「核销二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(CHECKOUT-CANCEL) +PASS 浮层「核销二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「核销二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「核销二次确认」Esc 能关 +PASS 浮层「核销二次确认」关掉后焦点回到触发件 P8-03 +PASS 浮层「核销二次确认」点遮罩能关 +--- 数值取证(布局视口 1440 × 900 ;window.innerWidth 1440)--- +PASS 对比度 --warn 对 --surface = 5.93:1(契约 ≥4.5:1) +PASS 对比度 --accent-text 对 --surface = 4.76:1(契约 ≥4.5:1) +PASS 对比度 --ink-faint 对 --surface = 3.55:1(契约 ≥3:1) +PASS 强调色填充面积占比:八页最高 创作台 = 0.52%(1 个填充块,契约 ≤5%) +量尺寸时滚动零点(P1):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P1) +PASS P1 账号矩阵:首屏从 669px 起,行距 31px,一屏装得下 7 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS P1 账号矩阵行高齐:31–31px,差 ≤2px +PASS P1 实际在用字号档 5 档:12px / 14px / 18px / 20px / 24px(契约 ≥3) +量尺寸时滚动零点(P2):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P2) +PASS P2 对标内容列表:首屏从 505px 起,行距 31px,一屏装得下 12 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS 横向溢出 = 0(scrollWidth 1440 = clientWidth 1440) +PASS 八页逐页查横向溢出:全为 0(最差 p1) +PASS 纵向滚动只由主区承担:.app 高 900px = 视口 900px;body 未承担滚动;主区 overflow-y auto,clientH 851 / scrollH 1435px(内容更高 ⇒ 主区可滚,折叠线以下的块拿得到) +(附)P1 行高 31/31/31/31/31px · 量时 scrollY=0 · 顶栏高 49px · 侧栏 184×550px · 主区 clientH 851 / scrollH 1435 +控制台报错:0 条 +``` + +**V2 与 V1 的判据差异(⛔ 不许混着比)**:V1 是 84 项 / 76 个 ID;V2 是 **77 项 / 89 个 ID**。条数少了,是因为 V2 把「浮层焦点」「行分隔线」这类判据合并重写,并**新增**了四条本版专有判据(导航三组组名逐字取自②段 / Page Shell 不占板块 / 对象冻结 / 「功能入口」层已撤销逐页为 0)。⇒ **「77 < 84」不代表判据变松**:见 §三,20 条变异全部被抓。 + +## 三、变异对照 20 / 20(证明上面那串 PASS 不是恒绿) + +做法:复制原型 → 注入一处**已知的假病** → 再跑一次自检 → 要求它报红、**且红在预期那一条上**。一个永远 PASS 的自检等于没有自检。 + +```text +基线(未注入):PASS 77 / FAIL 0 +✅ M1 死控件:注入(把 P2-01「低粉爆款」的实现掏空 —— 点它不再有任何反馈) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(P2-01) +✅ M2 未登记的可点元素:注入(在 P2「对标内容」那张满宽表里塞一个没写进交互清单的 data-act) ⇒ PASS 75 / FAIL 2 | 报红且红在预期处(未登记的 data-act) +✅ M3 悬空声明:注入(清单里声明了一个页面上根本不存在的 ID) ⇒ PASS 75 / FAIL 2 | 报红且红在预期处(声明了但页面里没有) +✅ M4 骨架漂移:注入(给 P3 多塞一个板块 —— ②段那份骨架是冻结的,这属于越界) ⇒ PASS 75 / FAIL 2 | 报红且红在预期处(骨架与②段不一致) +✅ M5 对比度越界:注入(把 --t-ink-faint 换成偏白的灰,压到契约线以下) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(对比度 --ink-faint) +✅ M6 点击无反馈(跳页不同步):注入(把 go() 退回「只改 hash」的写法 —— 点完状态不动) ⇒ PASS 75 / FAIL 2 | 报红且红在预期处(驱动了没反应) +✅ M7 行高不齐:注入(只把 P1 表里第一行的单元格内衬撑大) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(行高不齐) +✅ M8 密度退化:注入(把表格行的内衬从 4px 加到 36px) ⇒ PASS 75 / FAIL 2 | 报红且红在预期处(低于契约 6 行) +✅ M9 量尺寸时页面不在零点:注入(量 P1 之前先把主区滚下去) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(没回零点,视口 768x900) +✅ M10 页型纪律被破坏:注入(给页面框架的副标题挂一个 .lead 类) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(出现禁用类名) +✅ M11 浮层没有遮罩:注入(去掉遮罩层) ⇒ PASS 70 / FAIL 7 | 报红且红在预期处(没有遮罩) +✅ M12 关掉浮层后焦点不还回去:注入(把 closeLayer 退回「只清状态」的写法) ⇒ PASS 72 / FAIL 5 | 报红且红在预期处(关掉后焦点没回到) +✅ M13 浮层多出一个中性关闭出口:注入(给每个浮层的头部再加一颗 ×) ⇒ PASS 72 / FAIL 5 | 报红且红在预期处(中性关闭出口 = 2) +✅ M14 外壳高度链没约束住:注入(把 .app 的 height:100vh 退回 min-height:100vh) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(高度链没约束住) +✅ M15 用内联 style 表达选中态:注入(把 P2 分段控件加回内联 border-color:var(--ink)) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(内联 style 越权) +✅ M16 导航组名漂移(V2 新增判据的对照):注入(把第一个业务组名「找选题」改成「挑选题」) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(组名与②段不一致) +✅ M17 对象冻结被破坏(V2 新增判据的对照):注入(把 P1「账号矩阵」的核心业务对象改成字典外的名字) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(对象冻结出错) +✅ M18 「功能入口」那一层复活(V2 新增判据的对照):注入(在 P1 塞回一个 .sect-nav 容器) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(功能入口层的残留) +✅ M19 页标题漂移(骨架冻结的标题分支):注入(把 P1 的页标题改成错别字「矩阵总揽」) ⇒ PASS 76 / FAIL 1 | 报红且红在预期处(页标题) +✅ M20 打开浮层不送焦点:注入(把 paint() 里的 focusIntoLayer() 注释掉) ⇒ PASS 72 / FAIL 5 | 报红且红在预期处(打开后焦点不在层内) + +变异对照:20 / 20 通过 +⇒ 20 处假病全部被自检抓住,且基线回绿:这套判据不是恒绿的。 +``` + +⚠️ **两条变异是本轮「修完才活过来」的**(过程见 §六): +- **M18** 原来注进去**不报红** —— 判据只查当刻 DOM,而上一条检查停在 P8 ⇒ 注在 P1 的 `.sect-nav` 根本查不到。判据改成「八页逐页查」之后才抓到。**这就是一条假对照:它让人以为这条判据有人看着。** +- **M6** 一度从「报红」退化成「连输出都没有」 —— 我放宽 `hashchange` 守卫后的连带效果(§六 第 3 条),已回退。 + +## 四、骨架冻结闸门(正向 + 三条反向变异 + 一处判据边界) + +把②段 `2b-界面布局-新版.md` §五 当权威读,与原型 `const FROZEN` 表逐页逐位比(数量相等、顺序相等、名字剥掉「(…)」注解后逐字相同)。 + +```text +正向(权威件):PASS 骨架冻结:八页 39 个板块,②段 2b-界面布局-新版.md §五 与原型 FROZEN 表逐页逐位一致 +反向 1(②段副本 p1 第 2 块 →「矩阵一览」):FAIL p1 第 2 块 ②段「矩阵一览」≠ 原型「账号矩阵」 +反向 1'(②段副本 p1 第 2 块 →「账号矩阵一览」,只加后缀):FAIL p1 第 2 块 ②段「账号矩阵一览」≠ 原型「账号矩阵」 +反向 2(原型副本 p3 多塞一块):FAIL p3 板块数 ②段 4 ≠ 原型 5 +回正(权威件):PASS 八页 39 个板块 +``` + +🔴 **本轮收紧了一处判据(原来有洞)**:旧写法判「名字**互为前缀**」,理由是②段的名字带「(可点入)」这类注解。实测这个宽容**过了头** —— 把②段副本的 P1 第 2 块改成「**账号矩阵一览**」(原型仍是「账号矩阵」),旧判据**照样报 PASS**(`startswith` 命中)。真值核对:注解剥掉之后 **39 块逐字完全相同**,压根不需要前缀宽容。⇒ 已改为「剥注解后严格相等」,同一条漂移在新判据下报红(反向 1')。**三条反向变异全部报红 ⇒ 收紧后的闸门不是恒绿。** + +两条反向变异改的都是**副本**(`_scratch/probe/`),权威件 `2b-界面布局-新版.md` 全程只读。为了事后能复核,钉两组指纹 —— 🔴 **只读输入**(本棒一行没动,复跑前先比)与**本棒交付物终态**(收工时的值,改动后必须重取): + +```text +—— 只读输入 —— +2b-界面布局-新版.md md5 = adda4f13cde4d1b5b9fee88d991034c4 37 846 字节 +2a-产品功能-新版.md md5 = 087dff9b303e9170c29144a4c58d5dbc 40 917 字节 +GPT-规划意见与采纳决策.md md5 = 41e5da7ee617368d710959190c2bc039 42 443 字节 + +—— 本棒交付物终态(2026-10-09 收工)—— +ui/mcn-workbench.html md5 = 36d92ad6101cf48eb6a778eed339929b 137 555 字节 / 1 706 行 +ui/DESIGN.md md5 = 3ad8d426561aa80f8b82126a11e04c90 52 163 字节 +ui/3b-实测记录.md ⛔ 本份**不自我登记 md5** —— 每改一次它就变(登记的那一刻就会作废)。要核对现取:`md5sum ui/3b-实测记录.md` +``` + +✅ 复核方式:`md5sum 目标目录/2b-界面布局-新版.md`,与上面比。一致 ⇒ ③段确实没动过冻结骨架,也没动过本棒的只读输入。(⛔ 指纹只对「记下来的那一刻」负责;②段自己再改一轮、或本棒之后再改文档,这些值就旧了 —— 本棒交付物的指纹是按**收工时**取的,`3b-实测记录.md` 自身的 md5 会在最后一次编辑后重取。) + +## 五、多视口密度核对(16 档;契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1 原文,⛔ 不分档) + +全部走 CDP 声明式视口(`Emulation.setDeviceMetricsOverride`,只连不起、同一标签)。`P1 顶` = P1「账号矩阵」首行距视口顶的像素;`行` = 该表一屏装得下的行数。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 1280×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 1024×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 1000×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 960×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 920×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 901×900 | PASS 77/0 | 669px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 900×900 | PASS 77/0 | 661px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 840×900 | PASS 77/0 | 661px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 820×900 | PASS 77/0 | 661px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 768×900 | PASS 77/0 | 676px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 700×900 | PASS 77/0 | 676px | 31px | **7** | 12 | 49px | 184×550 | ✅ | +| 640×900 | PASS 77/0 | 714px | 31px | **6** | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | PASS 76/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | PASS 76/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | PASS 75/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档**(`run_viewports.py` 汇总:`逐视口:不达标 3 / 共 16`)。三处红的 FAIL 原文: + +```text +560x900 FAIL P1 账号矩阵一屏只能装下 5 行(首行顶 729px、行距 31px、视口高 900px),低于契约 6 行/900px 高 +500x844 FAIL P1 账号矩阵一屏只能装下 3 行(首行顶 729px、行距 31px、视口高 844px),低于契约 6 行/900px 高 +390x844 FAIL P1 账号矩阵一屏只能装下 0 行(首行顶 822px、行距 31px、视口高 844px),低于契约 6 行/900px 高 +390x844 FAIL P2 对标内容列表一屏只能装下 5 行,低于契约 6 行/900px 高 +``` + +**行本身没变肥**:所有视口行距恒为 31px、行高齐(差 ≤2px);红只出在 **P1 首行顶太高**(高 1440 是 669px,390 是 822px)。P2 只在 390×844 一档掉到 5 行,其余 15 档全达标(最差 8 行)。 + +> ⚠️ **与 V1 对照,必须说清归属**:V1(第八轮修完 A 方案)绿 14 档,只有 `500×844` 红。V2 变成绿 13 档,`560×900` 由绿转红、`390×844` 新增一档且红两份判据。**成因是 V2 自己的两处设计变更**:①侧栏由 `64px` 药丸浮栏加宽到 `184px`(主区变窄);②新增「页面公共框架(Page Shell)」一层(标题区 + 摘要统计区 + 页面操作区 + 辅助入口区),P1 首行顶被抬高。⇒ **这不是本棒造成的**(本棒一格几何都没动,见 §六末),也不是「改判据过关」——真值就是这样,如实登记。 + +## 六、本轮动过的四处(每条:现象 → 根因 → 证据) + +| # | 类型 | 现象 | 根因 | 证据 / 处置 | +|---|---|---|---|---| +| 1 | **真缺陷** | `#/selftest` 一旦跑起来,**整页永久不应答**:CDP `Runtime.evaluate` 一律 5 s 超时(连 `1+1` 都超时),进程还活着、端口还在听 —— 看起来像「浏览器卡死」 | 自检跑到末尾把 `S.route='selftest'` 留在状态里;而自检过程里 `toast()` 的 `setTimeout` 到点会再调 `paint()` ⇒ 又渲染一次自检 ⇒ 无限重入,**永久占住渲染主线程** | 修法:`paint()` 入口加守卫 `if(S.route==='selftest' && ST.lock) return;`。二分探针:卡住的那个标签 `js("1+1")` 也超时;**同实例另开一个标签** `js=2`、`metrics ok`、`close_tab` 正常 ⇒ 整实例健康,该关的是卡住的那一个标签。**2026-10-09 早上「反复开标签把整机拖死」就是踩在这上面** —— 页面不答,脚本只能再开一个标签,越开越多 | +| 2 | **假对照**(判据假绿) | 变异 M18(在 P1 塞回 `.sect-nav`)注进去**不报红** | 「功能入口层已撤销」这条判据只查**当刻渲染出来的那一页**,而上一条检查刚把 DOM 停在 P8 ⇒ 注在 P1 的 `.sect-nav` 根本不在视野里 | 判据改成**八页逐页** `applyScene` 后逐类名查(`.sect-nav` / `.data-card` / `.data-cards` 三选一命中即报红)⇒ M18 转 ✅,20/20 恢复 | +| 3 | **自己造成的回归** | 放宽 `hashchange` 守卫后,整屏自检输出被 P8 覆盖;变异 M6 从「报红」退化成「连输出都没有」 | 我把守卫从 `if(ST.lock) return;` 放宽成「只拦又往 `#/selftest` 走的那种」;而自检中途点侧栏排下的 hashchange 是**迟到的**,被放行后把页面切走 | 复现证据:临时注入 m6.html,探针读到 `res={"out":null,"fallback":null,"h2":"发布记录"}`。修法:**回退原写法**并加注释说明这是**载重**守卫、副作用(自检跑完后同一文档内改 hash 不生效)已知可接受 ⇒ M6 恢复 ✅ | +| 4 | **判据过松**(有洞) | 骨架闸门对「只加后缀」的漂移**静默放过** | 旧判据用「名字互为前缀」(`startswith`)来兼容②段的「(可点入)」注解,宽容度超出必要 | 实测:②段副本 P1 第 2 块改成「账号矩阵一览」仍 PASS。收紧为「剥注解后严格相等」(真值核对 39/39 逐字相同)⇒ 三条反向变异全部报红(§四) | + +**取证链上随之修的两处(属工具,不计缺陷)**: +- `cap.py` / `grab_selftest.py`:①`cap.py` 的顺序改成「**先定视口 → 过一趟 `about:blank` → 再导航**」——原来「先导航再定视口」会让页面按上一个视口排完;同一 URL 的 hash-only 导航只改 hash 不重载,会读到上一轮的数。②`grab_selftest.py` 删掉 `wait_for_load()` —— 自检占住主线程 > 5 s,`document.readyState` 必抛超时。③两者都改成**单标签复用**(不再 `new_tab`+`close_tab`),新增 `_tools/tab_close.py` 收工清场。 +- 截图一度「P1…P8 全是自检页那一屏」:根因是自检跑完后 `ST.lock` 恒真、`cap.py` 的 hash-only 导航被守卫吞掉 ⇒ 同一个锅,已由「先落脚 about:blank 再导航」修掉。 + +🔴 **本棒对界面几何零改动**:四次改动分别是 1 处 JS 死循环守卫、1 条自检判据写法、1 处注释回退、1 条外部闸门脚本判据。原型字节数变化(135 041 → 137 555 B)全部来自这三处 JS/注释 + 计数字段,`FROZEN` 表、板块、CSS 几何**逐字未动**(骨架闸门正向 PASS 即是证据)。 + +## 七、已记录的偏离(⛔ 不许静默) + +| # | 原要求 | 实际做法 | 原因 | 影响 | 处置 | +|---|---|---|---|---|---| +| D1 | 3b 实测走 `browser-harness` | ✅ 合规:自检 77 项 + 变异 20/20 + 16 档逐视口 + 17 张视口帧,**全部经 9223 上那个常驻实例**(CDP,只连不起) | — | 证据链可复跑 | **已合规**。⛔ 仍**没有**「真人真点」这一层,交互结论全部来自脚本驱动 | +| D2 | 终检要 `1440×900` 与 `390×844` 两个视口帧 | ✅ 两个都能出(PNG 尺寸当场比对) | — | ⚠️ 390×844 **能测 ≠ 达标**:P1 0 行、P2 5 行,两条判据报红 | 已出帧并如实登记;窄屏密度问题见 §八 | +| D3 | 对外只留视口帧、不留整页长图 | ✅ 17 张全是视口帧 | 本机通道做不到整页长图,`--full` 参数已删 | 无 | 已合规 | +| D4 | 3c 要「外部 GPT 会诊」 | 本轮**按红线停做**:派活单明令「⛔ 不许再向外发送本项目内容」(第②棒曾把产品现状发到站外) | 没有可用的站内独立通道,且对外发送是红线 | ⚠️ **未取得外部参考版 ≠ 已通过** | 持续偏离,已明示;本棒范围只到 3b/3d | + +## 八、这一步的门槛结论 + +- **Gate-1 方向门:✅ 过**(`DESIGN.md` §八,12 项逐条有结论;本轮已按实测回填 Gate-1 与逐视口表)。 +- **3b 实测:契约视口 1440×900 全绿** —— 自检 PASS 77 / FAIL 0,控制台报错 0 条,横向溢出 0(全文见 §二)。 +- **骨架冻结:过** —— 八页 **39 个板块**、顺序、名字(剥注解后逐字)与②段 `2b` §五 完全一致;②段指纹未变(§四)。 +- **其余三项闸门**:变异对照 20 / 20(§三);骨架闸门正向 PASS + 三条反向变异报红(§四);命名一致性 = 通过 2060 / 失败 0 / 提示 27(提示项是旧名出现在废止理由块里的正当留痕)。 +- **密度分界**:完整表在 §五(16 档),结论是**绿 13 档 / 红 3 档** —— 红的是 560×900、500×844、390×844。这里不重复列数字,免得两处各说一遍以后对不上。 +- 🔴 **一处必须讲清的账**:V2 的窄屏密度**比 V1 差了**(V1 第八轮修完后只有 500×844 一处红)。成因是 V2 自己的两处设计选择 —— 侧栏由 `64px` 药丸浮栏加宽到 `184px`(主区跟着变窄),以及新增「页面公共框架(Page Shell)」一层(标题区 + 摘要统计区 + 页面操作区 + 附属入口区一起把 P1 的首行顶抬高)。**本棒一格几何都没动**,只负责把真值测出来并登记。⇒ 要不要为窄屏动 V2 的断点,见回复里的待拍板项。 +- ⚠️ **可以进 3c/3d 的前提**:契约视口全绿已满足;窄屏三档红是**已登记**的偏离,⛔ 不代表不能往下走,但也⛔ 不许把它说成「全绿」。 + +--- + +## 九、说人话自评(判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 9 | 第一节就把「只做验证、没重做界面」钉死,没有「本次工作取得了进展」这类开场 | +| 节奏 | 9 | 表格与短断言之间补了连续叙述(§六 的归属段、§八 的账目段),不再通篇一句一行的电报体;⚠️ 仍偏表格驱动 | +| 信任度 | 10 | 把改坏的、一度变假的对照、比 V1 变差的档、判据原来的洞,全写出来了 | +| 真实性 | 9 | 每条结论都带现象、根因与证据(脚本名 / 变异编号 / 实测像素 / 命令原文) | +| 精炼度 | 9 | 自检全文照录是留证需要;密度结论只在 §五 出现一次,§八 只引不抄 | +| **总分** | **46 / 50** | 门槛 ≥45 ⇒ 过。压线两分,弱项写在节奏那一行 | + +⚠️ **这份初稿自评是 44(未过),按口径不能带着没过线的文字交付** ⇒ 重写了两处:①§八 的密度条目改成引 §五、不再复述一遍数字;②在 §六 与 §八 各补一段连续叙述,不全是短断言。改完复评 46。⛔ 不是改分数凑线 —— 改的是那两处被扣的地方。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__d85687.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__d85687.md new file mode 100644 index 0000000..298375d --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__d85687.md @@ -0,0 +1,359 @@ +# 3b · 实测记录(③段界面交互) + +> 落点:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/3b-实测记录.md` +> 判据源:`stage-delivery/SKILL.md` §3b/§供给;`references/execution-runbook.md` §3.5、§5.3、§六;`references/layouts-tooling.md` §1、§5.5 +> 交付物:`ui/mcn-workbench.html`(单文件自包含原型)+ `ui/DESIGN.md`(规范) + +## 〇、声明制(四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3b 原型构建 + 3b 实测(实测未过不进 3c) | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**:视觉与体验的底线判据)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据;只许更严、更具体,⛔ 不许放宽基础层)/ 挡位 **标准** | +| 依据文件 | `DESIGN.md`(本段契约)、`prd/2b-界面布局.md`(冻结骨架)、`prd/2a-产品功能.md`(F1–F14) | +| 产出落点 | `ui/mcn-workbench.html`、`ui/_tools/`(三个可复跑脚本)、`ui/_gate_shots/`(23 张视口帧) | + +## 一、怎么复跑(四条命令,全部只读原型) + +```bash +PY="E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" +cd "…/ui" +$PY _tools/cap.py --mode dom --route selftest --viewport 1440x900 --out _scratch/st.html # 取自检输出 +$PY _tools/mutate_test.py # 变异对照 +$PY _tools/check_skeleton.py # 骨架冻结闸门 +$PY _tools/check_js.py # JS 语法 + 模板里的反引号(第 5 个门禁,第六轮新增) +``` + +`cap.py` 对外只收 `--viewport`,**视口是声明式给的**(内部走 CDP `Emulation.setDeviceMetricsOverride`,见 §五 的通道口径一节)—— 不再有 `--window-size` 的偏移量口径,也不再自己起浏览器。 + +🔴 **复跑前先确认浏览器实例在跑**:本机明令「先探测、能复用就复用」(`skills/browser-harness/SKILL.md`)。 + +```bash +netstat -ano | grep -E "127\.0\.0\.1:9223 .*LISTENING" # 有 pid = 实例在跑 +``` + +实例没起来时 `cap.py` 会**直接报错退出**,⛔ 不会偷偷拉起一个(拉起谁、拉几个,是人的决定)。 + +`_scratch/` 是跑出来的中间件、目录不存在时脚本会自建,看完随手删掉不影响任何结论;交付目录里只留脚本、截图与四份文档。 + +## 二、自检 84 项(1440×900 主视口,PASS 84 / FAIL 0) + +自检是原型自带的:`#/selftest` 路由会在真实场景里逐个点过每个可点元素。全文落盘如下,⛔ 不是摘要。 +⚠️ **2026-10-08 第六轮重跑**(学参照物的组件细节:功能入口卡补 22px 图标、图标线宽 1.7→2、网格最小宽 180→200、hover 补轻阴影、问答区加虚线分隔)。这一轮**判据条数与 ID 数都没变**(84 项 / 76 个 ID / 72 个真驱动),变的是**几何**:P1 首行顶 688 → **697px**、P2 471px。下面这段是按改动后的原型**重新落盘**的。 + +```text +自检结果:PASS 84 / FAIL 0 + +PASS 路由 #/p/p1 渲染出 7 个顶层节点 +PASS 路由 #/p/p2 渲染出 6 个顶层节点 +PASS 路由 #/p/p3 渲染出 6 个顶层节点 +PASS 路由 #/p/p4 渲染出 6 个顶层节点 +PASS 路由 #/p/p5 渲染出 7 个顶层节点 +PASS 路由 #/p/p6 渲染出 6 个顶层节点 +PASS 路由 #/p/p7 渲染出 6 个顶层节点 +PASS 路由 #/p/p8 渲染出 6 个顶层节点 +PASS 六态 × 八页 = 48 个组合,全部渲染出内容 +PASS 侧栏只有一层:8 个功能项(总览 / 选题 / 资产 / 创作 / 发布 / 画像 / 复盘 / 对账)排成一列药丸浮栏(图标+2 字短名),一项一页,第二层 0 个 +PASS 八页一次点击可达:侧栏八个功能项直达 + 各页「功能入口」卡另给上下文入口(卡片共 8 个落点、无缺口) +PASS 清单里每个 ID 都在页面上出现过(76 个,无悬空声明) +PASS 页面上每个 data-act 都在清单里(共 638 次出现,无未登记的可点元素) +PASS 清单里 72 个 ID 都真驱动过并给出可见反馈,0 个死控件(24 个场景,每个实例各重置一次) +PASS 当刻被禁用的控件 4 个(有 disabled 属性:按契约在特定条件下不可点):P4-03, P5-06, P6-03, R-02 +PASS 清单里每个 ID 都至少被驱动过一次(无「从未跑过」的条目) +PASS 侧栏 8 个功能项逐个点过,每一项都落到了自己那一页 +PASS 五处「输入后才可用」的联动都通:其中 4 处在空输入时确实是禁用的 → 输入后转可用 → 点了有反应 +PASS 工具型纪律:零 .eyebrow / 零 .lead / 零 .hero +PASS 入场编排不做逐区块:@keyframes 共 0 处(工具型至多一处协调出场) +PASS 骨架冻结:八页 39 个板块的数量与顺序与 ②段 2b「板块清单」逐位一致,⛔ 未增删挪 +PASS 结构 ①:八页各一个 h1,标题逐级不跳;每个板块都有文字标题 +PASS 结构 ②:字号 12/14/16/18/20/24px 共 6 档,相邻差 2/2/2/2/4,正文档 14–16 在用 +PASS 结构 ④:逐页查过,首屏同屏主档按钮 ≤1 个;本页实底按钮 1 种 +PASS 组件口径:八页都没有用内联 style 表达选中态或覆盖字号(选中态走 .is-on / .is-active,字号走 --fs-* 档) +PASS 交互态与可读性::hover / :focus-visible 都在且没被 outline:none 抹掉;tabular-nums、prefers-reduced-motion、防溢出三件套齐全 +PASS 阴影:面板/卡片都用多层叠层,无单层死黑重阴影 +PASS 间距:flex/grid 的 gap 取值全部落在登记刻度内(9 个刻度) +PASS 浮层「随手记」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(R-03);遮罩是「点层外」通道,不计作出口 +PASS 浮层「随手记」打开后焦点在层内(当前=X-close) +PASS 浮层「随手记」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「随手记」Esc 能关 +PASS 浮层「随手记」关掉后焦点回到触发件 G-06 +PASS 浮层「随手记」点遮罩(层外空白)能关 +PASS 浮层「全局检索」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个;遮罩是「点层外」通道,不计作出口 +PASS 浮层「全局检索」打开后焦点在层内(当前=X-close) +PASS 浮层「全局检索」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「全局检索」Esc 能关 +PASS 浮层「全局检索」关掉后焦点回到触发件 G-10 +PASS 浮层「全局检索」点遮罩(层外空白)能关 +PASS 浮层「两处假设说明」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个;遮罩是「点层外」通道,不计作出口 +PASS 浮层「两处假设说明」打开后焦点在层内(当前=X-close) +PASS 浮层「两处假设说明」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「两处假设说明」Esc 能关 +PASS 浮层「两处假设说明」关掉后焦点回到触发件 G-08 +PASS 浮层「两处假设说明」点遮罩(层外空白)能关 +PASS 浮层「资产选择器」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个;遮罩是「点层外」通道,不计作出口 +PASS 浮层「资产选择器」打开后焦点在层内(当前=X-close) +PASS 浮层「资产选择器」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「资产选择器」Esc 能关 +PASS 浮层「资产选择器」关掉后焦点回到触发件 P4-04 +PASS 浮层「资产选择器」点遮罩(层外空白)能关 +PASS 浮层「版本列表」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个;遮罩是「点层外」通道,不计作出口 +PASS 浮层「版本列表」打开后焦点在层内(当前=X-close) +PASS 浮层「版本列表」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「版本列表」Esc 能关 +PASS 浮层「版本列表」关掉后焦点回到触发件 P4-07 +PASS 浮层「版本列表」点遮罩(层外空白)能关 +PASS 浮层「发布二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(P5-10);遮罩是「点层外」通道,不计作出口 +PASS 浮层「发布二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「发布二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「发布二次确认」Esc 能关 +PASS 浮层「发布二次确认」关掉后焦点回到触发件 P5-08 +PASS 浮层「发布二次确认」点遮罩(层外空白)能关 +PASS 浮层「核销二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(CHECKOUT-CANCEL);遮罩是「点层外」通道,不计作出口 +PASS 浮层「核销二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「核销二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「核销二次确认」Esc 能关 +PASS 浮层「核销二次确认」关掉后焦点回到触发件 P8-03 +PASS 浮层「核销二次确认」点遮罩(层外空白)能关 +--- 数值取证(布局视口 1440 × 900 ;window.innerWidth 1440)--- +PASS 对比度 --warn 对 --surface = 5.93:1(契约 ≥4.5:1) +PASS 对比度 --accent-text 对 --surface = 4.76:1(契约 ≥4.5:1) +PASS 对比度 --ink-faint 对 --surface = 3.55:1(契约 ≥3:1) +PASS 强调色填充面积占比:八页最高 创作台 = 0.52%(1 个填充块,契约 ≤5%;不含 3px 左侧标条 / 描边 / 文字色) +量尺寸时滚动零点(P1):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前三个滚动容器都停在零点(P1):rect 取到的是相对视口的真值 +PASS P1 账号矩阵:首屏从 697px 起,行距 31px,一屏装得下 6 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 ⇒ 实际可见 5 行(数据用尽,非被截断) +PASS P1 账号矩阵行高齐:31–31px,差 ≤2px(没有哪一行被状态标或长文字撑高) +PASS P1 实际在用字号档 6 档:12px / 14px / 16px / 18px / 20px / 24px(契约 ≥3) +PASS 视觉层间距 32px / 块内相邻行分隔 1px(发丝线,行本身不套框)⇒ 比值 32 ≥2(4 个视觉层) +P1 各块落位(顶 / 高):今日待处理@333+249 · 账号矩阵列表@614+249 · 异常值提示@895+201 · 全局检索与随手记@1128+231(视口高 900;并排的两块顶相同) +量尺寸时滚动零点(P2):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前三个滚动容器都停在零点(P2):rect 取到的是相对视口的真值 +PASS P2 对标内容列表:首屏从 471px 起,行距 31px,一屏装得下 13 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 ⇒ 实际可见 5 行(数据用尽,非被截断) +P2 各块落位(顶 / 高):对标监控概览@143+121 · 对标内容列表@389+249 · 评论区洞察@670+316 · 灵感速记@1018+99 +PASS 横向溢出 = 0(scrollWidth 1440 = clientWidth 1440) +PASS 八页逐页查横向溢出:全为 0(最差 p1) +PASS 纵向滚动只由主区承担:.app 高 900px = 视口 900px;body 未承担滚动(scrollTop 0);主区 overflow-y auto,clientH 851px / scrollH 1374px(内容更高 ⇒ 主区可滚,折叠线以下的块拿得到) +(附)P1 行高 31/31/31/31/31px · P1 按钮高度集合 32px · 量时 scrollY=0 · 顶栏高 49px · 导航占 900px(column)· 主区内衬上 24px · innerWidth 1440 − clientWidth 1440 = 0px(窗口滚动条宽度) +控制台报错:0 条 +``` + +截图:`_gate_shots/selftest-1440.png`。 + +## 三、变异对照 15 / 15(证明上面那串 PASS 不是恒绿) + +一个永远 PASS 的自检等于没有自检。做法:复制原型 → 注入一处**已知的假病** → 再跑一次自检 → 要求它报红、**且红在预期那一条上**。 + +```text +基线(未注入):PASS 84 / FAIL 0 +✅ M1 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M2 ⇒ PASS 82/FAIL 2 | 报红且红在预期处 +✅ M3 ⇒ PASS 82/FAIL 2 | 报红且红在预期处 +✅ M4 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M5 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M6 ⇒ PASS 82/FAIL 2 | 报红且红在预期处 +✅ M7 ⇒ PASS 82/FAIL 2 | 报红且红在预期处 +✅ M8 ⇒ PASS 82/FAIL 2 | 报红且红在预期处 +✅ M9 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M10 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M11 ⇒ PASS 75/FAIL 9 | 报红且红在预期处 +✅ M12 ⇒ PASS 77/FAIL 7 | 报红且红在预期处 +✅ M13 ⇒ PASS 77/FAIL 7 | 报红且红在预期处 +✅ M14 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 +✅ M15 ⇒ PASS 83/FAIL 1 | 报红且红在预期处 + +变异对照:15 / 15 通过 +⇒ 15 处假病全部被自检抓住,且基线回绿:这套判据不是恒绿的。 +``` + +⚠️ **M2 与 M8 这两个注入点本轮换过**(第三轮)。形态一改,注入点就必须跟着改,否则变异脚本会「找不到注入点、跳过」或者「注进去了但打不到判据」——**这两种都属于假对照,比没有变异更坏**(它会让人以为这条判据有人看着): +- **M2**(未登记的可点元素):P2 的「对标内容列表」由行式列表改成满宽表格后,原注入点 `.action-cell` 里的 `P2-03` **在文件里已经不存在** ⇒ 本轮实测时脚本直接判「跳过」。已把注入点换到表格那一行(`<td class="cell-act">`)。 +- **M8**(密度退化):密度判据本轮量的已是 P1 那张满宽表格(`.tbl-dense` 的 `td` 内衬),原注入点 `12px → 36px` 的 `.list-row` 内衬**对表格无效** ⇒ 实测 `PASS 83/FAIL 0`(没报红)。已把注入点换成表格 `td` 的内衬。 +- 上一轮同样处理过 **M7 / M10**(`.list-row` → 表格 `td`)。⇒ 一条经验:**判据形态改了,必须逐个复核每个变异的注入点还在不在**,`mutate_test.py` 已经把「找不到注入点」显式报成 ⚠️ 而不是静默跳过(本轮就是靠它抓到的)。 + +⚠️ **M9 换过两次**。第一版是「拿掉 `applyScene` 末尾的滚动复位」,实测观测不到差别(重绘 `#view` 时浏览器把滚动自然夹回 0)⇒ 假变异。第二版改成 `window.scrollTo(0,300)`,**2026-10-08 又发现它同样抓不到东西**:外壳修完之后滚动容器是 `.view`,`window` 根本滚不动,拿 window 注入等于没注入。现在注入点是 `document.querySelector('.view').scrollTop=300`,也就是这条守卫真正声称要拦的那件事。 + +⚠️ **M14 是这一轮新加的**:它注入的就是 §六 第 16 条那个真缺陷的原样(`.app` 退回 `min-height:100vh`)。加它的目的只有一个 —— 证明新判据「纵向滚动只由主区承担」不是恒绿。 + +## 四、骨架冻结闸门(正向 + 双向变异) + +把②段 `prd/2b-界面布局.md` §二 当权威读,与原型 `FROZEN` 表逐页逐位比(数量相等、顺序相等、名字互为前缀)。 + +```text +正向:PASS 骨架冻结:八页 39 个板块,②段 2b-界面布局.md §二 与原型 FROZEN 表逐页逐位一致 +反向变异 1(改原型 p3 多一块):p3 板块数 ②段 4 ≠ 原型 5 +反向变异 2(改②段副本 p1 第 2 块名):p1 第 2 块 ②段「账号矩阵一览」≠ 原型「账号矩阵列表」 +``` + +两条反向变异改的都是**副本**(`_probe/2b-mut.md`),权威件 `prd/2b-界面布局.md` 全程只读。为了事后能复核这件事,这里钉一条指纹: + +```text +prd/2b-界面布局.md md5 = 61129a3c7944b7d0455d9530d7d373f7 15688 字节 mtime 2026-10-08 09:01 +(上一版指纹 1dcc69f9…/15036 字节/02:30 已作废:②段在 09:01 自己动过一次 —— 那时 ②段 的 2b 定稿又改过一轮,③段手里那条指纹就旧了。⛔ 指纹只对「记下来的那一刻」负责。) +``` + +✅ 复核方式:`md5sum ../prd/2b-界面布局.md`,与上面比。一致 ⇒ ③段确实没动过冻结骨架。 +(这条指纹是删 `_probe/` 之前补登的 —— 备份删掉后,只剩这一个数能证明骨架没被污染,所以先写进正文再清临时件。) + +## 五、多视口密度核对(契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1 原文,⛔ 不分档) + +> 🔴 **2026-10-08 第七轮整表重测替换**(功能入口卡按参照物改成三段纵向之后)。这张表的**用法本轮变了**:不再只报「现在几行」,而是**同一台机器、同一套判据,跑改前/改后两版**逐格对照 —— 本轮改动的正当性就建立在这张对照上:卡长高 43px,但**绿色的视口一个没少**。 +> 两版:`_scratch/base.html`(改前,=把本轮两处改动回退后的副本)/`mcn-workbench.html`(改后);各跑 15 个视口,全部走 CDP 声明式视口(见本节末「通道口径」)。 + +| 视口 | 自检 | P1 账号矩阵(改前 → 改后) | P2 对标列表 | 顶栏 | 侧栏 | +|---|---|---|---|---|---| +| 1440×900 | PASS 84/0 | 697 → **701px**,**6 行** ✅ | 13 行 | 49px | 64px 药丸浮栏 | +| 1280×900 | PASS 84/0 | 697 → **701px**,**6 行** ✅ | 13 行 | 49px | 64px 药丸浮栏 | +| 1024×900 | PASS 84/0 | 697 → **701px**,**6 行** ✅ | 13 行 | 49px | 64px 药丸浮栏 | +| 1000×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 960×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 920×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 901×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 900×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 840×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 820×900 | PASS 84/0 | 677 → **676px**,**7 行** ✅ | 14 行 | 49px | 64px 药丸浮栏 | +| 768×900 | PASS 83/**1** | 741 → 779px,**5 → 3 行** ❌ | 14 行 | 49px | 64px 药丸浮栏 | +| 700×900 | PASS 83/**1** | 834 → 872px,**2 → 0 行** ❌ | 11 行 | 57px | 64px 药丸浮栏 | +| 640×900 | PASS 84/0 | 711 → **700px**,**6 行** ✅ | 13 行 | 57px | 横滚标签条 | +| 560×900 | PASS 83/**1** | 820 → 808px,**2 行** ❌ | 10 行 | 57px | 横滚标签条 | +| 500×844 | PASS 83/**1** | 875 → 882px,**−1 → −2 行** ❌ | 8 行 | 57px | 横滚标签条 | + +**结论:绿/红的分界逐格完全一致** —— 绿:1440 / 1280 / 1024 / 1000 / 960 / 920 / 901 / 900 / 840 / 820 / 640;红:768 / 700 / 560 / 500。行本身没变肥(行高 **30.5–31px**、各行差 ≤0.5px、块内分隔 1px),在**所有**视口都 PASS。 + +> 🔴 **必须改正上一版的一处错数。** 上一版把 **768×900 记成「首行 677px、7 行 ✅」**,于是得出「**≥640px 宽时 P1 与 P2 都达标**」。本轮在**改前的版本上**重测是 **741px、5 行 ❌**(改后 779px、3 行)⇒ 那句结论是错的,真实分界是 **640 与 ≥820 绿;768 与 700 红;560 与 500 红**。 +> +> 这处错数的**根因**恰好就是本轮修掉的那件事:旧取证通道用 `chrome.exe --window-size` 定视口,而**窗口尺寸不等于 CSS 视口**(两条通道对同一尺寸的解释还不同,见本节末)。**768 恰好卡在功能入口卡「3 列/2 列」的阈值上(主区内容宽 632px),只差 7px** ⇒ 旧通道多给十几像素视口,卡就从两行变一行、首行顶差 64px。换成 CDP 声明式视口后这个歧义不存在了。 +> +> **本轮把高度还回去的三处**(实测 P1 首行顶 740 → **701**,−39px):① 删掉「功能入口」小标(−24.6px,八页各一处);② 统计条下边距 `8 → 6`(−2px);③ 块标题与内容之间的间距 `.block-head` `12 → 8`(P1 上方有三处,−12px)。`≤640` 一档另追加一条:卡内衬 `8/12 → 6/8`、图标 `18 → 16`、标题 `18 → 16`、`.block` 上边距 `32 → 24`(实测 724 → **700**,−24px)。 +> +> ⚠️ **归属必须说清**:本轮修的**只有我自己刚造成的回归**(改卡前 697/6 ✅ → 改完 740/5 ❌)。**768 / 700 / 560 / 500 这四处红是改前就有的,与本轮无关** —— 768/700 的根因是功能入口卡在 768 折成两行、统计条在 700 折成两行;500 是已知缺口。⛔ 本轮没有顺手改它们,免得把「本轮改了什么」和「本来就有什么」搅在一起。 +> +> ⚠️ **「改完只量主视口」这个毛病犯了两次,两次都是逐视口表兜住的。** 第一次(第六轮):加 22px 图标那轮只量了 1440(697px/6 行 ✅)就往下走,回头才发现 **640 由 5 行掉到 3 行**(卡变高 + 网格最小宽 180→200 ⇒ 608px 主区装不下三张卡、折成两行、卡块高度翻倍)。第二次(本轮):改完卡只量 1440(701/6 ✅,看着没事),是这张表把「改后 768/700/560/500 全红、1440 也从 6 行掉到 5 行」抓出来的。⇒ **只量契约视口、不回量窄屏,是会漏的;这条已经进 DESIGN.md §五 第 7 条。** + +> 上一轮(第四轮)修掉的两处旧错仍成立: +> ①**顶栏列**:旧表在 901–1000 段写「93px(折两行)」、其他段写 69/53px —— 那是演示下拉还在的时候。顶栏收成「产品名 + 随手记」并把内衬 16→8 之后,**全宽度恒为 49px**(640 以下 57px)。 +> ②**P2 列**:旧表写「6 行/7 行」,是**没跟着形态改的旧数**。P2 的「对标内容列表」第三轮已由行式列表改成满宽表格 ⇒ 行距 31px、容量 **14 行**,**任何视口都达标**(500×844 也有 8 行)。⇒ 现在**只有 P1 这一列**在窄屏/窄中屏不达标。 +> +> ⚠️ 另一条反直觉的实测(第三轮记的,首行顶数字已按本轮实测更正):同一个 768px 视口,侧栏 240px 时 P1 首行顶 **816px ⇒ 2 行**,收到 64px 后 **741px ⇒ 5 行**。**主区越窄,密度反而越差**(功能入口卡会被挤成两行)。 +> +> 还有一条被第三轮推翻的旧结论:第三轮记过「照搬 `3c-GPT参考版.md` 那版的满宽表格顺排 ⇒ 一屏只装得下 2 行」。**真的照搬了之后是 6 行**(行高 67px→31px)⇒ 正确表述是「满宽顺排与『一屏 ≥6 行』可以兼得,代价是行高必须压到 31px 上下」。 + +<!-- 🔻 旧表(2026-10-08 之前,基于假数)已删除,只在此留一句索引,避免有人从旧版复制: + 旧表在 1440/1280 报「首行 214/216px、10 行」,1024/768 报「6 行 ✅」—— + 那 4 行是 `<body>` 被滚 435px 之后量出来的,不是布局真的那么好。 --> + +### 通道口径(2026-10-08 第七轮改写:整个通道换掉了) + +**旧通道(已废)** 是 `chrome.exe --headless=new --window-size=… --dump-dom / --screenshot`。它有两个坑,第二个是这轮才彻底看清的: + +**坑一:两条模式对同一个 `--window-size` 的解释不一样。** + +```text +--window-size=656,995 ─┬─ --dump-dom ⇒ 视口 640 × 900 (mq<=640 true) + └─ --screenshot ⇒ 视口 656 × 995 (mq<=640 false) +``` + +⇒ 当时只能在调用侧按模式补偏移量(dom 补 +16 / +95,shot 原样)。而一旦补错,报告里就会出现「同一个 1440×900,一份证据当成 1440 说话、另一份当成 640 说话」这种自相矛盾 —— 本轮之前的截图全部比标称大 16×95(「1440×900」其实是 1456×995)。 + +**坑二:窗口尺寸本来就不保证等于 CSS 视口。** 这正是 §五 那处 768 错数的来源(差十几像素就跨过功能入口卡 3 列/2 列的阈值)。旧通道还有个硬上限:Chrome 窗口宽最小 516px ⇒ **视口宽量不到 500 以下**,所以此前契约里凡写 390 的地方一律按 500×844 记。 + +**新通道**:`_tools/cap.py` 改走浏览器实例的 CDP,用 `Emulation.setDeviceMetricsOverride` **声明式**定视口。三个后果: + +1. **要多少是多少**:「1440×900」就是 1440×900(dump 里会印实际 `innerWidth/innerHeight`,不符直接断言失败)。 +2. **偏移量那套口径整段作废**,`--window-size` 不再出现。 +3. **500px 下限解除** —— 已实测 **390×844**(PNG 尺寸当场比对通过)。 + +同时保留原来的守卫:**每次截图后直接从 PNG 的 IHDR 读真实像素跟目标视口比**,不等就报红。 + +⚠️ 还有一条同样重要的:新通道**只连已有实例,⛔ 不自己起浏览器**(本机明令,见 `skills/browser-harness/SKILL.md` 开头的「先探测、能复用就复用」)。实例没起来时 `cap.py` 直接报错退出,不会偷偷拉起一个。 + +### 第八轮(A 方案 + 滚动条修复) + +> 🔴 **本块替换上一块的数据行。** 用户 2026-10-08 拍板「A 方案」。做法与结果: + +| 视口 | 改前 首行顶/cap | 改后 首行顶/cap | | +|---|---|---|---| +| 1440 / 1280 / 1024 ×900 | 701 / 6 | 701 / 6 | 一格未动 | +| 1000 / 960 / 920 / 901 / 900 / 840 / 820 ×900 | 676 / 7 | 676 / 7 | 一格未动 | +| **768 ×900** | 779 / 3 | **676 / 7** | ✅ 转绿 | +| **700 ×900** | 872 / 0 | **676 / 7** | ✅ 转绿 | +| **640 ×900** | 700 / 6 | **685 / 6** | ✅ 余量更大 | +| **560 ×900** | 808 / 2 | **700 / 6** | ✅ 转绿 | +| 500 ×844 | 882 / −2 | **773 / 2** | ❌ 唯一不达标 | + +**做了两件事 + 修了一个真缺陷**: +① 功能入口卡最小宽 `200 → 160px`(`≤1000` 档)—— 768 下主区内容宽 625px,200px 只能放 2 列 ⇒ 三张卡折成两行、卡块高度翻倍; +② 统计条最小宽 `132 → 96px`(`≤820` 档)—— 700 下 132px 只能放 3 列 ⇒ 4 格折成两行、统计条由 77.59 翻到 171.19; +③ 移动档标签条**藏掉 16px 横向滚动轨**(见 §六 第 32 条)。 +⚠️ 两处 `auto-fit` 都**只在真装不下时才缩** ⇒ 上面 10 个视口一格未动,这是"不是拿宽屏换窄屏"的直接证据。 + +## 六、本轮修掉的真缺陷(每条:现象 → 根因 → 证据) + +| # | 现象 | 根因 | 证据 | +|---|---|---|---| +| 1 | 整份设计系统在屏幕上失效 | 样式表顶部注释里 `--t-*/--raw-*` 的 `*/` 提前闭掉注释,吞掉整个 `:root` 令牌块 | 修复后对比度取证才量得出来 | +| 2 | 全表行分隔线一直没画出来 | `.list-row:first-child{border-top:0}`:每行都包在 `<li>` 里,于是**每行都是自己 `<li>` 的 first-child**,`borderTopStyle` 全是 `none` | 变异 M10;另修了判据除数为 0 时恒 PASS(比值 `Infinity`) | +| 3 | 浮层不浮 | `#layer-root` 与 `.layer` 都没有定位样式,浮层渲染在文档流末尾,得滚到页尾才看得见 | 改为遮罩 `fixed inset:0` + 层本体 `fixed` 居中 | +| 4 | 行高随文字长短乱跳(66/82/100px) | 状态标放在操作列把 `auto` 列撑宽,只有那一行折行 | 状态标移到名称旁;再加「行内每段不许换行 + 省略号」;判据新增「行高齐」 | +| 5 | 自检在窄视口给出假 PASS「装得下 10 行」 | 驱动几百次点击后浏览器为聚焦元素自动滚动,`rect.top` 变负,容量公式虚高 | 加「量尺寸时页面在滚动零点」守卫 + 变异 M9 | +| 6 | 手机导航「既不是一条、也没滚动」,占 161px | `.sidebar` 只给了 `flex-direction:row`,可导航分组挂在 `<nav id="nav">` 里,而 `#nav` **一条样式都没有** ⇒ 仍是块级容器,4 个分组照旧竖堆 | 补 `#nav{display:flex;flex-flow:row nowrap}` + 整条链 `flex:0 0 auto`;161px → 53px | +| 7 | 顶栏「演示 · 账号」折成两行,顶栏被顶到 70px | `.topbar-label` 没有 `white-space:nowrap` | 独立评审第一眼点出;补 nowrap 后顶栏 69px | +| 8 | 截图尺寸全部比标称大 16×95 | `cap.py` 对两条通道用了同一个偏移量 | §五「通道口径」;已加 PNG 尺寸守卫 | +| 9 | 两个二次确认浮层其实各有**两个**可见关闭控件,判据却报「出口 = 1」 | 判据只数 `.layer-close` 这个类名,把可见的「取消」从眼皮底下藏掉了;核销层的「取消」还复用了 `X-close` | 判据改为「中性出口只认 `X-close`」+「决策型关闭单列报数」;核销取消拆出 `CHECKOUT-CANCEL`;加变异 M13 | +| 10 | 「今日该发:待发:3 分钟快手菜」冒号连用,评审读成错字 | 示意数据 `today` 字段的值里自带冒号,被拼进「今日该发:…」 | 数据改为空格分隔 | +| 11 | 制作黑话写在界面上(「这里是 X 的 empty 态」) | 状态面板上另贴了一句给做原型的人看的说明,而 `STATE_COPY` 已铺好用户向文案 | 删掉那句话;按钮改「回到正常内容」 | +| 12 | 手机形态看不出当前在哪一页 | 横滚标签栏里当前项滚在视野外 | 只调 `.sidebar` 自己的 `scrollLeft` 把当前项带进视野(⛔ 不碰 `window`,否则会误触滚动守卫) | +| 13 | `layerTrigger` 放进状态快照 `S` | 点任何元素都会改 `S` ⇒ 状态快照跟着变 ⇒ **没有一个控件会被判死**,死控件判据整条失效 | 移出 `S`;变异 M1/M6 当场回归报红 | +| 14 | 浮层焦点与可见性判据全部失效 | `offsetParent` 对 `position:fixed` 元素恒为 `null` | 改用 `getClientRects().length` | +| 15 | `--full`(整页长图)静默失效,产出的还是视口帧 | 无头 CLI 这条通道只能截视口 | 参数已删除,`_full/` 目录一并清掉,不留一个撒谎的开关 | +| 16 | **整页「滚不动」**(不是「不滚」):1440×900 下 P1 有 1543px 内容,只有前 900px 可达 —— 异常值提示 / 本月表现最好 / 全局检索三块在真机里**永远看不到**,而且滚动条也没了(用户连「滚一下」都提不起来) | 外壳只抄了 `html,body{height:100%;overflow:hidden}`,**没把高度链约束住**:`.app` 用 `min-height:100vh` ⇒ 跟着内容长到 1543px,`.main` 1543、`.view` clientHeight = 1474 = scrollHeight(**自己不滚**),真正的滚动落到 `<body>` 上,而 body 是 hidden | 探针实测:`.app` 高 1543px = 内容高、`view.scrollable=false`、`body.scrollTop=435` 而 `window.scrollY=0`。修法:`.app{height:100vh}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0}`;新增判据「纵向滚动只由主区承担」+ 变异 M14 | +| 17 | 自检在窄视口量出的密度**是假数**(假绿):500×844 曾报「一屏装得下 7 行」,真值连 1 行都不到;1024×768 的「4 行」同样是假的 | 「量尺寸前回零点」只复位了 `window`,而实际被滚的是 `<body>`(`body.scrollTop 435` / `window.scrollY 恒为 0`)⇒ 首行 top 被截短、容量虚高。**这是本条最要紧的一处**:假绿比红更坏 | 守卫改为三个容器**逐个核**(window / html / body / .view),`applyScene` 一并复位;变异 M9 的注入点从 `window.scrollTo` 改到 `.view.scrollTop`(原来那条已经抓不到东西,是假变异) | +| 18 | 两栏带 `.band` 在 1024 就落回单列,白丢 4 行密度 | 原注释写「1024px 劈两半后矩阵列表只剩不到 300px」,2026-10-08 复测实得 **336px**(列宽 167 / 121 / auto),三列都不折行 | 收线由 `max-width:1024px` 挪到 `max-width:900px`;1024×900 实测由 4 行 → **8 行**(契约 ≥6 ✅) | +| 19 | P2「对标内容列表」被新加的功能入口卡压到一屏 5 行(首行顶 503px,契约 ≥6) | 功能入口卡按用户口径紧贴在「数据统计」下面,它的高度**直接**转嫁给下面那张吃密度契约的列表 | 收两处:卡内衬 `16` → `12/16`;`≤1000px` 宽隐掉卡片描述。实测 960px:517px → **497px ⇒ 6 行** | +| 20 | 窄视口顶栏折两行白吃 40px | `≤1024` 的顶栏只收了间距与标签文字,**上下内衬仍按 16px** | `≤1024` 内衬收成 `8px`;实测顶栏 109px → **93px**,901–1000 段两个列表都由 5 行回到 6 行 | +| 21 | P3-03「入库」被自检判成**悬空声明**(声明了但页面上没有) | 改版时把「入库」从「单条详情」搬进了资产表格的行尾,而表格**只渲染当前分区**的行 —— 自检的 P3 场景把 `assetSel` 设成 as3(结构分区)却没改 `assetZone`(仍是角度分区),于是那行根本不在表里 | 把动作**搬回「单条详情」**(门禁说明「补上出处才能入库」本来就长在那里,动作与说明不该拆开);表格只做展示、不放行级动作。⇒ 自检 83/0 回绿。**教训**:形态改版顺手挪动作位置,会把「动作 + 它的门禁说明」拆到两个地方 —— 这类搬家不属于「照抄布局」的授权范围 | +| 22 | 两条变异(M2 / M8)**悄悄失效**:一条「找不到注入点、跳过」,一条注进去了却不报红 | 判据的形态改了(P2 列表 → 表格、密度量的是表格内衬),而变异的注入点还指在旧的 `.list-row` / `.action-cell` 上 ⇒ 假对照(比没有变异更坏:它让人以为这条判据有人看着) | 注入点跟着形态重指(M2 指到表格 `<td class="cell-act">`、M8 指到 `.tbl-dense` 的 `td` 内衬);`mutate_test.py` 把「找不到注入点」显式报成 ⚠️ 而不是静默跳过。⇒ 14/14 回绿 | +| 23 | 顶栏堆了 **7 项**杂件(收起侧栏/面包屑/演示·账号/演示·状态/全局检索/随手记/假设 2 项),≤1024 折成两行、顶栏 93px | **没有一项是技能规则要求的**:2 项来自本项目参照物笔记(`ui/布局排版参考-mcn-work-shop.md`)、3 项是我自己造的原型件、1 项与②段 P1 的页内板块重复、1 项(假设入口)是我自己挂在顶栏的第二处;唯一被②段硬要求的是**随手记**(`2b` §286「任意页面一次点击内」) | 删 5 项(收起侧栏/面包屑/两个演示下拉/顶栏全局检索)、改挂 1 项(假设入口 → 两处「假设」徽章,`G-08` 仍活)、留 1 项(随手记)。内衬 16→8 ⇒ 顶栏 **69px → 49px** 且**任何宽度都不折行**。逐样来源定位见 `3d-审查报告.md` §十 | +| 25 | **「模板里的 HTML 注释带反引号」同一个坑踩了第 4 次** —— 页面在浏览器里才炸(白屏 / `xxx is not defined` / `Unexpected identifier`),而 `node --check` 整份 html 报不出来 | 原型把页面结构写在 **JS 模板字面量**里(反引号包起来);模板里的 HTML 注释只要出现一个反引号,模板就被提前闭合,后面那段被当 JS 解析 | ①当场修掉;②**做成第 5 个门禁 `_tools/check_js.py`**:抠 `<script>` 段跑 `node --check` + **多行**扫描 script 区内每个 `<!-- … -->` 块里的反引号(⚠️ 必须多行扫 —— 反引号常在注释的**续行**上,单行 grep 抓不到);③做了变异对照:往一条注释里注一个反引号 ⇒ 报 **FAIL 2 项**、退出码 1(证明它不恒绿) | +| 26 | **加图标那一轮的窄屏回归**:640×900 的 P1 由 5 行掉到 **3 行** | 功能入口卡补了 22px 图标、内衬由 `8/12` 提到 `12/16`,同时网格最小宽 180→200 —— 608px 的主区装不下三张卡,折成两行,卡块高度翻倍。**根因是那一轮只量了契约视口 1440,没回量窄屏** | 补 `≤640px` 紧凑档(内衬 `8/12`、图标 `18px`、最小宽 `160px`、隐「功能入口」小标)⇒ 640 回到 **6 行、自检转全绿**;500×844 由 −2 回到 −1(与原状态一致)。⇒ 记住:**几何一改,逐视口表必须整表重跑** | +| 24 | **同一个「选中态」有三套画法**(侧栏当前项浅紫底 / 分段控件用 `.btn btn-sm` + **内联** `border-color:var(--ink)` 五处 / 表格当前行用**内联** `color:var(--accent-text)` 四处);字号也有 **内联覆盖** 两处(P7 三个数硬顶 `--fs-20`、P4 统计条的「/7」) | 五处分段控件与四处表格当前行都是**早期赶进度时用内联样式铺的**,既没进令牌也没进组件表;判据当时只查「gap 是否落在登记刻度」,**内联样式不在任何判据的视野里** ⇒ 没人拦 | ①`<style>` 里补四个组件:`.seg`/`.seg-item`(选中项 `.is-on`)、`.field`(字段间距)、`.cell-name.is-on`(表格当前行);②五处分段控件换成 `.seg-item.is-on`、四处表格当前行换成 `.cell-name.is-on`、P7 三个数换成 `.home-stats`/`.stat-item`、P4 统计条去掉 `/7` 的内联字号;③P8 对账核对区表由宽松档 `.ds-table` 换 `.tbl-side`;④行级动作统一 `.btn-micro`(P2-06/07/09/10、P4-05/08);⑤**新增自检第 84 项「组件口径」**(八页里 `[style*=border-color]`/`[style*=color]`/`[style*=font-size]` 出现次数都为 0)+ 变异 **M15** 证明它不恒绿 | +| 27 | 功能入口卡按参照物改成**三段纵向**后,**1440×900 的 P1 由 6 行掉到 5 行**(首行顶 697 → 740px) | 卡高 68 → **111px**(+43px),而 P1「统计条 + 功能入口卡」这一摞压在两张 5 行表上、本来只剩 **17px** 余量(697px 距 714px 的六行线)⇒ 余量被一口吃光 | 逐值量参照物(`mcn-work-shop/public/style.css:387-392` + `app.js:332-336`)确认**卡高本来就该是 133px**(同宽 113px),差的主因是**排布**(第一版把「图标+标题」并成一行 ⇒ 少一段 + 少两次 6px 段间距);然后从三处还回 39px ⇒ 701px/6 行。两版 15 视口逐格对照见 §五 | +| 28 | 文档里 **768×900 的行数是错的**(上一版记「677px/7 行 ✅」) | 旧取证通道用 `chrome.exe --window-size` 定视口,而**窗口尺寸不保证等于 CSS 视口**。768 恰好卡在功能入口卡「3 列/2 列」的阈值上(主区内容宽 632px)**只差 7px** ⇒ 旧通道多给十几像素,卡就从两行变一行、首行顶差 64px | 在**改前的版本(`_scratch/base.html`)**上用声明式视口重测:768 → 741px/**5 行 ❌**。⇒ 连带作废上一版「≥640px 全绿」的结论,真实分界是 640 与 ≥820 绿、768 与 700 红、560 与 500 红(§五 全表) | +| 29 | `_tools/cap.py` **自己起 headless Chrome**,且视口靠 `--window-size` 猜 | 违反本机明令(`browser-harness` 是唯一允许的浏览器工具),并且带来第 28 条那种「差十几像素就跨过断点」的不确定性;还有 500px 的宽度硬下限 | 改走 CDP `Emulation.setDeviceMetricsOverride`:**只连 9223 上已有实例、不起新的**,视口要多少是多少。已实测 **390×844**(PNG 尺寸当场比对通过)⇒ **500px 下限解除**,契约里「390 一律按 500 记」那条例外作废 | +| 30 | 本轮一度新建了 `_tools/measure.py`(量元素几何真值),但它自己起 Chrome | 与第 29 条同一个毛病;本机的正解是让 harness 常驻、临时脚本只连不起 | **写完即删**(`_tools/` 现在只剩 cap/check_js/check_skeleton/mutate_test 四个)。量几何真值这件事本身仍然留下了证据 —— 用的是 harness 直连,脚本放在 `_scratch/`(中间件,不进交付) | +| 32 | 移动档的导航标签条里压着一根 **16px 高的横向滚动条** | 标签条自身 `scrollWidth` 724 > 可见宽(560px),`overflow-x:auto` 自动画出轨道;条子本体只有 52px 高 ⇒ **三成高度是灰杠** | 实测(560×900):`.sidebar` offsetHeight 68 / clientHeight 52 ⇒ 滚动条 **16px**;藏轨后首行顶 714.66 → **700px**(P1 由 5 行到 6 行)。修法 `scrollbar-width:none` + `::-webkit-scrollbar{height:0}` —— ⛔ 不是删滚动能力,是不画那根轨 | +| 33 | 全局技能包 `check_naming.py` 有 **3 条既有 FAIL**(不是本轮引入) | ①「停线规则」这条 AUTHORITY 的 `authority` 写成了 **`None`** ⇒ 检查器把它当成"全包禁写、**连权威处也不许写**",与本条自己的 `why`(「口径只在本包 SKILL.md 的「执行规则」」)**自相矛盾**;而 SKILL.md 里**根本没有这条规则** ⇒ 规则的内容一处都没落;②③ `stage-proto-doc/SKILL.md:22` 与 `usage-scenario.md:103` 仍写①段**已废的 `strategy/` 路径** | 复跑命令:`check_naming.py --root . --ws <工作区>`(改前 通过 2057 / **失败 3** / 提示 29)。已修:authority 改 `SKILL.md` 并把规则补进「执行规则」;两处路径改 `research/1d-产品策略.md` / `research/1e-使用场景.md` ⇒ **通过 2060 / 失败 0 / 提示 27** | +| 31 | 导航的**样式**一直没量到 —— 第三轮只照组件清单猜了个「形态」 | 当时从 `references/library.json` 只读到**计数**(`nav-item` 81 / `nav-icon` 81 / `nav-tip` 81 …)就下了结论「一项一图标一提示、⛔ 项内不放常驻文字」;而 `tokens.css` 里**没有一条导航几何**、`design-system.html` 里 `app-sidebar` **0 处** ⇒ **包里根本没有那个事实**,猜出来的形态与源站实测**正好相反** | 回源站 `https://www.tiaoyue.com/` 实测(亮色形态强制 `data-theme=light`):栏是 **64px 药丸**(圆角 100px/内衬 3px/淡底+淡描边/⛔ 无右边线),项是 **56×78 药丸**、**图标 24 在上、名字 12px/500 在下、两者都常驻**;名字一律 **2 字**(内容宽 56−16×2=24px)。逐条对照表在 `3d` §十三。⚠️ 这次改动**不动布局**(栏宽仍是 64px 定值、只让药丸变高)⇒ 15 个视口首行顶一格没动,⛔ 不需要还账 | + +## 七、已记录的偏离(⛔ 不许静默) + +| # | 原要求 | 实际做法 | 原因 | 影响 | 处置 | +|---|---|---|---|---|---| +| D1 | 3b 实测走 `browser-harness` | ✅ **2026-10-08 第七轮已合规**:自检 84 项 + 变异对照 15/15 + 视口帧 + 逐条 DOM 取值,**全部经 9223 上那个常驻实例**(`_tools/cap.py` 走 CDP,只连不起) | 此前用的是 `chrome.exe --headless` 另起实例 —— 既违本机明令,又带来视口歧义(§六 第 28/29 条) | 证据链可复跑;⛔ 仍**没有**「真人真点」这一层,交互结论全部来自脚本驱动 | **已修**(第七轮)。人工走查仍待用户裁定 | +| D2 | D5 终检要 `1440x900` 与 `390x844` 两个视口帧(runbook §5.3、§七) | ✅ **2026-10-08 第七轮起两个视口都能出**(390×844 已实测,PNG 尺寸当场比对通过) | 旧通道(`--window-size`)受 Chrome 窗口宽下限 516 ⇒ 视口最小 500 | 无 | **已修**(第七轮)。⚠️ 390 的**密度**还没纳入逐视口表,⛔ 不许把「能测」当成「达标」 | +| D3 | 对外只留视口帧;`_full/` 长图仅自检(runbook §七) | 未产出长图 | `--full` 在本机通道上做不到(只能截视口),已把该参数删掉 | 无 | 已修 | +| D4 | 3c 要「外部 GPT 会诊」 | 见 `3c-GPT会诊.md`:本会话无对外模型通道,改用**隔离上下文的独立评审执行者** | 没有外部通道可用 | 与「异厂商外部审查」不是同一条通道 | 持续偏离,已明示 | + +## 八、这一步的门槛结论 + +- 3a 已过 Gate-1(见 `DESIGN.md` §四)。 +- 3b 实测:**契约视口 1440×900 全绿(PASS 84/FAIL 0)**。 +- **密度分界(2026-10-08 第八轮实测,15 个视口)**:绿 = 1440 / 1280 / 1024 / 1000 / 960 / 920 / 901 / 900 / 840 / 820 / **768** / **700** / **640** / **560**;红 = **500×844**(唯一一个,P1 账号矩阵 2 行)。⇒ 比上一轮多转绿三个(A 方案 + 滚动条修复)。 +- 🔴 **口径更正**:上一版写的「宽 ≥640px 全绿/边界 768px」是错的(768 的真值是 5 行 ❌,见 §五 与 §六 第 28 条)。现在能说的是「**≥820px 全绿;768 与 700 是窄中屏的两个洞;≤560 与 500 是窄屏两个洞**」。 +- 🔴 **本轮的正当性靠对照支撑**:改前/改后各跑 15 个视口,**PASS/FAIL 逐格完全一致**(§五 表)。功能入口卡长高 43px 这件事是**从别处把高度还回去**做到的,⛔ 不是拿密度换的;同时修掉的**只有本轮自己造成的回归**,768/700/560/500 那四处红**改前就存在**。 +- ⚠️ 一处**已解除的限制**:窄视口此前只能测到 500×844(Chrome 窗口宽下限),现在走 CDP 声明式视口,**390×844 已可测**(§六 第 29 条)。⚠️ 但 390 的密度还没纳入逐视口表,⛔ 不许把「能测」当成「达标」。 +- 顺带记四件事:①外壳「整页不滚」曾等于「整页不能滚」(§六 第 16 条),已修并由判据 + M14 看住;②改版首跑时自检在窄视口量出的是假数(§六 第 17 条),已修并由 M9 看住;③「模板里的 HTML 注释带反引号」这个坑踩了 4 次,已做成第 5 个门禁 `check_js.py` 并由变异证明不是恒绿(§六 第 25 条);④**「改完只量主视口」这个毛病犯了两次**(第六轮 640、本轮 1440),两次都是逐视口表兜住的 —— 已写进 `DESIGN.md` §五 第 7 条当纪律。 +- ✅ **导航样式已按源站实测对齐**(2026-10-08 第七轮追加):栏 → 64px 药丸浮栏、项 → 56×78 药丸(图标 24 + 2 字短名常驻)、当前项 → 中性填充 + 满墨、提示 → 该页说明。五道闸门复跑全过,且**对密度中性**(15 个视口首行顶一格未动)。 +- 可以进 3c。 + +--- + +## 九、说人话自评(判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 9 | 开头就是复跑命令,没有「本次工作取得进展」这类开场 | +| 节奏 | 8 | 表格 + 短断言为主,句式偏单一,⚠️ 弱项 | +| 信任度 | 10 | 把改坏的、没测到的、换了通道的都写出来了,没有藏 | +| 真实性 | 9 | 每条缺陷都带现象、根因与证据(脚本名 / 变异编号 / 实测数) | +| 精炼度 | 9 | 15 条缺陷各一行,不重复叙述;自检全文照录是留证需要,不是凑字 | +| **总分** | **45 / 50** | 门槛 ≥45,压线过;扣分点写在第 2 行 | diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fa6e07.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fa6e07.md new file mode 100644 index 0000000..67f6c63 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fa6e07.md @@ -0,0 +1,284 @@ +# 3b 交互原型 · 实测记录(V4 · 八条口径落进②段两份与原型) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3b 子步产出 +> 落点:`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/ui/3b-实测记录.md` +> 本轮范围:把用户 2026-10-09~10-10 的**八条口径**落进原型 —— ① P2 选题库加「类型」维度、去掉「灵感速记」板块;② P3 职责改「统一管理」;③ P4 展开单位改平台账号;④ P5 目标选择改两级;⑤ P6 画像五维 + 新增「平台账号」板块。**页数、导航一层七项、流转 20 条、令牌与几何一格未动。** +> ⛔ 本份的数全部现取,**一个都不许凭记忆填**。数据源:`#/selftest` 全文 + `_tools/` 9 个脚本。 +> 🔴 取证全程走「只连不起」:本机 `9223` 常驻独立 Chrome(计划任务 `bh-chrome-keepalive` 保活),一个任务只开一个标签并复用,换视口走 `Emulation.setDeviceMetricsOverride`。 + +--- + +## 一、自检全文(1440×900,PASS 78 / FAIL 0) + +原样取自 `_tools/grab_selftest.py`,未删行、未改字。全文 85 行,此处逐条列。 + +``` +自检结果:PASS 78 / FAIL 0 + +PASS 路由 #/p/p1 渲染出 6 个顶层节点 +PASS 路由 #/p/p2 渲染出 5 个顶层节点 +PASS 路由 #/p/p3 渲染出 4 个顶层节点 +PASS 路由 #/p/p4 渲染出 5 个顶层节点 +PASS 路由 #/p/p5 渲染出 5 个顶层节点 +PASS 路由 #/p/p6 渲染出 5 个顶层节点 +PASS 路由 #/p/p7 渲染出 5 个顶层节点 +PASS 六态 × 七页 = 42 个组合,全部渲染出内容 +PASS 页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8) +PASS 导航一层七项:7 个功能项、一项一页,零组标 / 零跨组线(⛔ 没有第二层) +PASS 导航七项与用户口径逐字一致、顺序相同:首页 / 选题 / 创作 / 投放 / 复盘 / 账号 / 资产(资产排最后) +PASS 七页一次点击可达:侧栏 7 个功能项直达(⛔ 已撤销「功能入口」那一层,跨页入口只留在侧栏与板块内行级动作) +PASS 清单里每个 ID 都在页面上出现过(90 个,无悬空声明) +PASS 页面上每个 data-act 都在清单里(共 683 次出现,无未登记的可点元素) +PASS 清单里 86 个 ID 都真驱动过并给出可见反馈,0 个死控件(25 个场景,每个实例各重置一次) +PASS 当刻被禁用的控件 4 个(按契约在特定条件下不可点):P4-03, P5-06, P6-03, R-02 +PASS 清单里每个 ID 都至少被驱动过一次(无「从未跑过」的条目) +PASS 侧栏 7 个功能项逐个点过,每一项都落到了自己那一页 +PASS 五处「输入后才可用」的联动都通:其中 5 处在空输入时确实是禁用的 → 输入后转可用 → 点了有反应 +PASS P7「确认与改判」是回写的**前置开关**:未采纳时回写禁用、采纳后转可用(不是只留痕) +PASS 工具型纪律:零 .eyebrow / 零 .lead / 零 .hero +PASS 入场编排不做逐区块:@keyframes 共 0 处 +PASS 骨架冻结:七页 39 个板块的数量与顺序与新版 2b「业务板块清单」逐位一致,⛔ 未增删挪 +PASS 页面公共框架(Page Shell):七页各恰好 1 个,且都不带 .block / 不带 .block-head h2 ⇒ 不计业务板块数、不占冻结计数 +PASS 对象冻结:七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内(或显式「—」+说明),且与 OBJ_MAP 逐块一致 +PASS 功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立) +PASS 辅助入口区:每页最多 1 个跳转入口 ⇒ ⛔ 没有把流转表在框架层重写一遍 +PASS 「功能入口」那一层已撤销:.sect-nav / .data-card / .data-cards 在七页**逐页**出现 0 次(2b §九第 2 条) +PASS 结构 ①:七页各一个 h1,标题逐级不跳;每个板块都有文字标题 +PASS 结构 ②:字号 12/14/18/20/24px 共 5 档,相邻差 2/4/2/4,正文档 14–16 在用 +PASS 结构 ④:逐页查过,首屏同屏主档按钮 ≤1 个;本页实底按钮 1 种 +PASS 组件口径:七页都没有用内联 style 表达选中态或覆盖字号(选中态走 .is-on / .is-active,字号走 --fs-* 档) +PASS 交互态与可读性::hover / :focus-visible 都在且没被 outline:none 抹掉;tabular-nums、prefers-reduced-motion、防溢出三件套齐全 +PASS 阴影:面板/卡片都用多层叠层,无单层死黑重阴影 +PASS 间距:flex/grid 的 gap 取值全部落在登记刻度内(9 个刻度) +PASS 浮层「随手记」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(R-03) +PASS 浮层「随手记」打开后焦点在层内(当前=X-close) +PASS 浮层「随手记」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「随手记」Esc 能关 +PASS 浮层「随手记」关掉后焦点回到触发件 G-06 +PASS 浮层「随手记」点遮罩能关 +PASS 浮层「两处假设说明」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个 +PASS 浮层「两处假设说明」打开后焦点在层内(当前=X-close) +PASS 浮层「两处假设说明」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「两处假设说明」Esc 能关 +PASS 浮层「两处假设说明」关掉后焦点回到触发件 G-08 +PASS 浮层「两处假设说明」点遮罩能关 +PASS 浮层「资产选择器」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(PICK-CANCEL) +PASS 浮层「资产选择器」打开后焦点在层内(当前=X-close) +PASS 浮层「资产选择器」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「资产选择器」Esc 能关 +PASS 浮层「资产选择器」关掉后焦点回到触发件 P4-04 +PASS 浮层「资产选择器」点遮罩能关 +PASS 浮层「发布二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(P5-10) +PASS 浮层「发布二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「发布二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「发布二次确认」Esc 能关 +PASS 浮层「发布二次确认」关掉后焦点回到触发件 P5-08 +PASS 浮层「发布二次确认」点遮罩能关 +PASS 浮层「核销二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(CHECKOUT-CANCEL) +PASS 浮层「核销二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「核销二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「核销二次确认」Esc 能关 +PASS 浮层「核销二次确认」关掉后焦点回到触发件 P7-11 +PASS 浮层「核销二次确认」点遮罩能关 +--- 数值取证(布局视口 1440 × 900 ;window.innerWidth 1440)--- +PASS 对比度 --warn 对 --surface = 5.93:1(契约 ≥4.5:1) +PASS 对比度 --accent-text 对 --surface = 4.76:1(契约 ≥4.5:1) +PASS 对比度 --ink-faint 对 --surface = 3.55:1(契约 ≥3:1) +PASS 强调色填充面积占比:七页最高 创作台 = 0.52%(1 个填充块,契约 ≤5%) +量尺寸时滚动零点(P1):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P1) +PASS P1 账号矩阵:首屏从 669px 起,行距 31px,一屏装得下 7 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS P1 账号矩阵行高齐:31–31px,差 ≤2px +PASS P1 实际在用字号档 5 档:12px / 14px / 18px / 20px / 24px(契约 ≥3) +量尺寸时滚动零点(P2):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P2) +PASS P2 对标内容列表:首屏从 505px 起,行距 31px,一屏装得下 12 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS 横向溢出 = 0(scrollWidth 1440 = clientWidth 1440) +PASS 七页逐页查横向溢出:全为 0(最差 p1) +PASS 纵向滚动只由主区承担:.app 高 900px = 视口 900px;body 未承担滚动;主区 overflow-y auto,clientH 851 / scrollH 1435px(内容更高 ⇒ 主区可滚,折叠线以下的块拿得到) +(附)P1 行高 31/31/31/31/31px · 量时 scrollY=0 · 顶栏高 49px · 侧栏 128×350px · 主区 clientH 851 / scrollH 1435 +控制台报错:0 条 +``` + +**要盯的三条**(本轮主改动各自对应的判据,都在上面): +- 「骨架冻结:七页 **39** 个板块…逐位一致」—— 治「P2 收 4 块(删灵感速记)+ P6 增 5 块(加平台账号)」,一减一加; +- 「页集合正好七页」+「导航一层七项」+「功能 ↔ 板块一一对应」—— 三条**照旧全 PASS**,证明八条口径改的是**页内构成**,页集合 / 导航 / 流转一格未动; +- 「清单里每个 ID 都在页面上出现过(**90** 个)」+「86 个 ID 都真驱动过…0 个死控件」—— 治「撤 `P2-11`、增 `P2-12`/`P6-06`/`P6-07` 后清单仍然干净」。 + +--- + +## 二、变异对照(24 条,24 / 24 通过) + +做法:把原型复制一份、注入**一处已知的假病**,再跑一次自检 ⇒ 必须报红、且红在**预期的那一条**上。测完即删临时件。基线(未注入)= `PASS 78 / FAIL 0`。 + +> 为什么必须有这一节:一个永远 PASS 的自检等于没有自检。只有「注病 → 报红 → 复原 → 回绿」这条链走通了,上面那 78 个 PASS 才算证据。 + +| # | 注入的假病 | 结果 | 红在哪 | +|---|---|---|---| +| M1 | 掏空 `P2-01` 的实现(点了没反应) | 77/1 ✅ | P2-01 | +| M2 | P2 表里塞一个没登记的 `data-act` | 76/2 ✅ | 未登记的 data-act | +| M3 | 清单里声明一个页面上没有的 ID | 76/2 ✅ | 声明了但页面里没有 | +| M4 | 给 P3 多塞一个板块 | 76/2 ✅ | 骨架与②段不一致 | +| M5 | 把 `--t-ink-faint` 调到契约线以下 | 77/1 ✅ | 对比度 | +| M6 | `go()` 退回「只改 hash」 | 76/2 ✅ | 驱动了没反应 | +| M7 | 只把 P1 表第一行撑高 | 77/1 ✅ | 行高不齐 | +| M8 | 表格行内衬 `4px → 36px` | 76/2 ✅ | 低于契约 6 行 | +| M9 | 量 P1 前先把主区滚下去 | 77/1 ✅ | 没回零点 | +| M10 | 给页框架副标题挂 `.lead` | 77/1 ✅ | 出现禁用类名 | +| M11 | 去掉浮层遮罩 | 71/7 ✅ | 没有遮罩 | +| M12 | `closeLayer` 退回「只清状态」 | 73/5 ✅ | 关掉后焦点没回到 | +| M13 | 每个浮层头部多加一颗 × | 73/5 ✅ | 中性关闭出口 = 2 | +| M14 | `.app` 高度退回 `min-height:100vh` | 77/1 ✅ | 高度链没约束住 | +| M15 | 分段控件加回内联 `border-color` | 77/1 ✅ | 内联 style 越权 | +| M16 | 导航第一项「首页」改成「首业」 | 77/1 ✅ | 导航项与用户口径不一致 | +| M17 | P1「账号矩阵」的对象改成字典外的名字 | 77/1 ✅ | 对象冻结出错 | +| M18 | P1 塞回一个 `.sect-nav` | 77/1 ✅ | 功能入口层的残留 | +| M19 | P1 页标题改成「矩阵总揽」 | 77/1 ✅ | 页标题 | +| M20 | 注释掉 `paint()` 里的 `focusIntoLayer()` | 73/5 ✅ | 打开后焦点不在层内 | +| M21 | 往侧栏塞回一个 `.nav-group` 容器(第二层复活) | 77/1 ✅ | 组标与跨组残留 | +| M22 | 把 P8 加回页面表(独立页复活) | 76/3 ✅ | 页面集合不是七页 | +| M23 | F12 的归属页从复盘改成投放(归属漂移) | 77/1 ✅ | 功能与板块对不上 | +| M24 | 摘掉 P4「录制卡片与画板」挂的 F14(悬空功能) | 77/1 ✅ | 功能与板块对不上 | + +**V4 对 M15 的处置**:M15 的注入点是「P2 选题库那个分段控件」。本轮 P2 选题库从**一个**分段控件变成**两个**(进度 + 类型),注入点仍落在第一个上 ⇒ 重跑后照旧报红(`内联 style 越权`)。⚠️ 这条要留意:**形态一改,注入点要复核** —— 本轮复核过,没坏。 + +### 2.1 M22 返工两次 —— 「注入点写坏」与「判据报红」是两件事(沿用上一轮留痕) + +第一次 `❌ 注入后自检跑不出来(连输出都没有)`。查下来**不是判据不灵,是注入点写坏了**: + +1. **第一版**:只往 `PAGES` 里塞了个 `p8` 键,没配渲染函数 ⇒ 自检第 1 步渲染 p8 时 `PAGE_FN['p8']` 是 `undefined`,渲染期直接抛错。 +2. **第二版**:补了渲染器,但没在 `STATE_COPY` 里登记 ⇒ 自检第 2 步「六态 × 页面」走到 `statePanel('p8')`,读 `STATE_COPY['p8'].loading` 报 `TypeError: Cannot read properties of undefined`。 +3. **第三版(现在这版)**:改在**启动行**注入 —— 那时 `PAGES` / `PAGE_FN` / `STATE_COPY` 三张表都已就位 ⇒ 报红且红在「页面集合不是七页」。 + +**顺带修了一处取证盲区**:原来 `renderSelftest()` 的兜底分支渲染的块**不带 `id="selftest-out"`** ⇒ 自检一崩,取证工具什么都读不到,变异对照只会得到一句「连输出都没有」,**分不清是注入点坏了还是自检自己炸了**。现在崩了也照正常格式吐一个 `#selftest-out`(head 行写 `PASS 0 / FAIL 1`,正文写栈)。 + +--- + +## 三、闸门脚本(`_tools/`,共 9 个) + +| 脚本 | 判据 | 本轮结果 | +|---|---|---| +| `check_js.py` | `<script>` 段过 `node --check`;模板里的 HTML 注释不许出现反引号 | ✅ `PASS 语法:<script> 段 1439 行,node --check 通过` + `PASS 模板里的反引号…不含反引号` ⇒ 全过 | +| `check_skeleton.py` | ②段 `2b` §五 ↔ 原型 `FROZEN` 表,逐页逐位比(板块**数**相等、**顺序**相等、剥掉「(…)」注解后**逐字相同**) | ✅ `PASS 骨架冻结:七页 39 个板块,②段 2b-界面布局-新版.md §五 与原型 FROZEN 表逐页逐位一致` | +| `run_viewports.py` | 16 档逐视口|一屏行数 ≥6(`layouts-tooling.md` §1,⛔ 不分档) | ⚠️ `逐视口:不达标 3 / 共 16`(见 §五,一条登记项) | +| `mutate_test.py` | 24 条变异,每条都要求报红在预期处 | ✅ `变异对照:24 / 24 通过` | +| `run_shots.py` | 出 `_gate_shots/*.png` 视口帧(⛔ 不出整页长图) | ✅ `视口帧:成功 17 / 失败 0 / 共 17`;落盘 **16 个 PNG**(`P1-1440` 被「逐页」与「断点」两个循环各出一次、同名覆盖),PNG 尺寸当场逐个比对通过 | +| `cap.py` / `grab_selftest.py` | 单标签复用 + 自检轮询取值(IPC 读超时 5s,⛔ 不能 `wait_for_load`) | ✅ 两个跑通,无卡死 | +| `tab_close.py` | 收工清场 | ✅ 收工前已跑(见 §八) | + +**`check_js.py` 为什么单拎一条**:JS 模板字符串里的 HTML 注释不许出现反引号 —— 会提前闭合模板字面量、整页静默白屏,而 `node --check` **报不出来**。这条已经踩过四次。本轮改了 P2/P5/P6 三处模板拼接,**改完先跑它**(全过),再往下走。 + +--- + +## 四、骨架冻结的反向变异(改②段副本、看闸门是否报红,验完即还原) + +`check_skeleton.py` 的判据能在**正向**报 PASS,不代表它有牙齿。本轮改了骨架两条(P2 收 1 块、P6 增 1 块),因此**重新**做了四个方向的反向变异: + +| # | 改什么 | 期望 | 实得 | +|---|---|---|---| +| ① 板块名漂移 | ②段 P2 第 4 块「选题库」→「选题仓库」 | 报红 | ✅ `FAIL p2 第 4 块 ②段「选题仓库」≠ 原型「选题库」` | +| ② 板块数漂移 | ②段 P2 删掉第 4 块 | 报红 | ✅ `FAIL p2 板块数 ②段 3 ≠ 原型 4`(并列出两侧清单) | +| ③ 顺序漂移 | ②段 P6 第 2、3 块对调(平台账号 ↔ 画像五维) | 报红 | ✅ `FAIL p6 第 2 块 ②段「平台账号」≠ 原型「画像五维」`(第 2、3 块各报一条) | +| ④ 命名再漂移 | ②段 P2 第 4 块「选题库」→「素材池」 | 报红 | ✅ `FAIL p2 第 4 块 ②段「素材池」≠ 原型「选题库」` | + +> ⚠️ **注一条假病、验完还原** 是这一步的纪律。有一个真实教训:`check_naming.py` 曾因 stale 变量(该用 `tt` 用了 `old`)导致「旧名提示」**恒不触发**(假绿)—— 判据写得再漂亮,不做变异对照就是自欺。 + +--- + +## 五、逐视口表(16 档 · V4 整表重跑) + +契约:一屏可见行数 **≥6 / 900px 高**,⛔ 不分档。`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 `9223` 已有实例,⛔ 不另起)。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1280×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1024×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1000×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 960×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 920×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 901×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 900×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 840×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 820×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 768×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 700×900 | 78/0 | 676px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 640×900 | 78/0 | 714px | 31px | 6 | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | 77/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | 77/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | 76/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档。** 行距在所有档恒为 `31px`、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(669 → 822px)。 + +🔴 **这张表是 V4 整表重跑的,⛔ 不是沿用 V3。** 16 档逐格数值与 V3 **完全相同**(含自检 78/0、红档 77/1 与 76/2)。原因说清:本轮动的是 **P2 选题库(它在「对标内容」之下)**、**P5 目标选择**、**P6 画像与平台账号** —— 而这张表量的是 **P1「账号矩阵」首行顶** 与 **P2「对标内容」一屏行数**,两处都没碰,所以数不变。要盯的是「量的是不是同一处」:`run_viewports.py` 取的是同一组选择器(`.block` 里找含「账号矩阵」/「对标内容」的那块)。 + +### 5.1 红档成因(V3 订正、V4 复核仍成立) + +V2 把这三档的成因记作「侧栏 `64 → 184px`(主区变窄)+ 新增 Page Shell 一层」。V3 把侧栏收窄到 `128px` 后重跑,P1 首行顶逐档**与 V2 完全相同**(`669 / 729 / 822px`),只有 `768×900` 一档由 `676 → 661px`。 + +⇒ **侧栏宽度不是成因**,「主区变窄」这半句划掉。剩下的是 **Page Shell 一层把 P1 首行顶抬高**,窄屏再因表格列换行加一截。V4 复核:结论不变(见上表注)。 + +### 5.2 一个数字错误,当场改掉并记账(V3 留痕,V4 沿用) + +改②段(V3 那轮)时曾把板块总数写成 **41**(「P7 由 6 块变 10 块 ⇒ 39 → 41」)—— 这是**算错了**:P8 那 4 块搬进 P7,是**搬位置不是新增**,总数净变化为 0。真值由 `check_skeleton.py` 数出来是 **39**。 + +🔴 **V4 再数一遍(因为本轮骨架动了两处)**:`p1 5 / p2 4 / p3 4 / p4 6 / p5 5 / p6 5 / p7 10` = **39**。P2 由 5 收成 4(−1)、P6 由 4 增到 5(+1),一减一加 ⇒ **总数不变**。这条是本轮唯一一处容易数错的地方,故在这里把逐页数与加总一起写出来,⛔ 不写「仍是 39」就完事。 + +--- + +## 六、本轮动过的地方(逐条:现象 / 根因 / 证据 / 处置) + +| # | 现象 | 根因 | 证据 | 处置 | +|---|---|---|---|---| +| 1 | P2 选题库只有「进度」一个维度,装不下「对标线索 / 评论洞察 / 数据异动 / 灵感」这些不同类型的信息 | 用户口径:选题库容纳「对选题有帮助的任何信息」,靠分类区分 | 用户原话「选题库里面可以是对选题有帮助的任何信息 分类区分就好」 | 选题库加第二个 `.seg`(类型:全部/选题/对标线索/评论洞察/数据异动/灵感)+ 选题行加「类型」列;`TOPICS` 逐条补 `type`;新 ID `P2-12` | +| 2 | P2 把「灵感速记」同时当成第 5 个板块、又在分档表里标成「不占板块」 | ②段 V3 自身两处打架(V3 `DESIGN.md` §五 缺口 8 已登记) | `2b` §五 P2 板块清单 5 块 vs 同页分档表 | 按用户口径**统一**:灵感速记**不再是板块**,P2 骨架 5 → 4 块;撤 `P2-11`(随手记的全局入口 `G-06` 仍在,那个按钮是页内重复);②段 V4 两处已同步一致 | +| 3 | P3 的页面职责是「存拆解结果」,等于把入库口锁在这一页 | 用户口径:入库不限页,资产库页是统一管理的地方 | 用户原话「所有页面有产生资产都可以 随时入库,资产库页是统一管理的地方」 | P3 页面副标题与 `DESIGN.md` §1.2 职责改成「统一管理」;P2「对标内容」块写明拆解结果**可就地入库** | +| 4 | P4 版本管理的展开单位是「账号 × 平台」 | 用户口径:展开单位是**平台账号**(`2a` F7) | `2a` F7「按平台账号展开」 | 按钮文案 `按账号 × 平台展开` → `按平台账号展开`;说明与 `P4-11` 的提示、新增版本名同步;`DESIGN.md` §2.4 P4-11 同步 | +| 5 | P5 目标选择是「账号」与「平台」两个**彼此独立**的多选,摘要区是「目标账号数/目标平台数」 | 用户口径:两级 —— 一个内容账号对应多个平台账号,按平台账号选 | 用户口径 + `2a` §二 对象字典 | 数据由 `targets:{accounts,platforms}` 改 `{accounts,channels}`;新增 `PLATS`(平台账号=渠道,带「平台 + 登录态 + 授权状态」);渲染改成「先选内容账号 → 它下面的平台账号逐行勾选」;摘要区改「目标渠道数/覆盖平台数」;`P5-02`/`P5-03` 实现改成「去勾账号时连它的渠道一起摘掉」 | +| 6 | P5 各版本块没有写死「一版一路」 | 用户口径:一个渠道只对应一个版本(`2a` F13);`PublishRecord` 不加渠道字段 | `2a` F13 | 块头说明改「一个平台账号一版(一版一路)」;版本条目按「内容账号 · 平台账号」标注 | +| 7 | P6 的画像含「平台」这一维,且没有地方管平台账号的登录与授权 | 用户口径:账号是两个概念 —— 内容账号管内容属性(平台不归它),平台账号是发布渠道 | 用户原话「内容账号管的是内容属性…平台账号应该是 发布的渠道三方平台账号」 | 画像六维 → **五维**(删「平台」这一维与 `PROFILES` 的 `平台` 字段);**新增「平台账号」板块**(骨架 4 → 5 块);新 ID `P6-06`(登录/重新授权)/`P6-07`(加一个平台账号);账号行次级信息由「平台」改成「N 个平台账号」 | +| 8 | 定时发布要不要做 | 用户口径:挂起 | 用户原话(2026-10-10 07:56)「后续具体做投放功能的时候在说」 | **本轮不落**:⛔ P5 不加定时块、⛔ 不加状态、⛔ 不改流转;只在②段登记(`2a` §九 第 7 项/`2b` §十 第 7 项) | + +--- + +## 七、与上一版(V3 原型)的实质差别 + +1. **P2 骨架 5 → 4 块**:「灵感速记」不再是 P2 的板块(随手记只留全局入口 `G-06`);撤 `P2-11`。 +2. **P2 选题库多一个维度**:进度(`P2-08`)+ **类型**(`P2-12`),两个正交;选题行多一列「类型」。 +3. **P6 骨架 4 → 5 块**:新增「平台账号」;画像六维 → **五维**;新 ID `P6-06`/`P6-07`。 +4. **P5 目标选择改两级**:数据由 `{accounts,platforms}` 改 `{accounts,channels}`;新增 `PLATS`;摘要区改「目标渠道数/覆盖平台数」;各版本块写死「一个平台账号一版」。 +5. **P4 展开单位**由「账号 × 平台」改「平台账号」(文案 + 提示)。 +6. **P3 职责**由「存拆解结果」改「统一管理」(文案;入库不限页)。 +7. **交互清单 88 → 90 个 ID**(撤 1、增 3);`data-act` 出现次数 679 → 683;真驱动 84 → 86。 +8. **骨架总数仍 39**(逐页 5/4/4/6/5/5/10);**页数、导航一层七项、流转 20 条、令牌与几何一格未动**。 +9. **②段/③段三份文档同步**:`2a` 升 V4、`2b` 升 V4、`DESIGN.md` 升 V4,均带「与上一版的实质差别」逐条。 + +--- + +## 八、遗留与待裁定(⛔ 不粉饰) + +1. **窄屏三档密度红**(`560×900` P1 5 行/`500×844` P1 3 行/`390×844` P1 0 行 + P2 5 行)。已证明与侧栏宽度无关(§5.1)。是否动窄屏断点,**待用户裁定**,本棒不擅自改。 +2. **「满宽表格」与「一屏 ≥6 行」在窄屏不可兼得** —— 沿用上一版登记,未动。 +3. **P7 现在是一页两个主操作**(复盘那半「确认归因并回写」/记录那半「核销一条记录」)。②段 V4 §五 P7 已写死「10 块平铺、不划子区、属发布之后看数据与看收入一类」,用户口径是**不拆**。⚠️ 两个主操作是并页带来的形态,`DESIGN.md` §2.5 写了「同屏只出当前上下文那一个」,本棒按此实现。 +4. ✅ **②段那处内部不一致已订正(V3 登记 → V4 关闭)**:原 `2b` §五 P2 板块清单把「灵感速记」列第 5 块、同页分档表又标「不占板块」。V4 两处已统一,骨架随之由 5 块收成 4 块。 +5. **两处假设仍未获用户结论**(沿用):P1 的形态(待复核第 5 条)、P7 后半段「商单与收支」要不要进第一版(待复核第 6 条 + A3)。原型的「假设」徽章(`G-08`)可点开看复核人 / 时机 / 落点。 +6. **定时发布挂起**(V4 新增登记):按用户口径本轮不落,等真做投放功能时再议(`2a` §九 第 7 项/`2b` §十 第 7 项)。 +7. **3c GPT 参考版本轮不做** —— 派活单明令不许向外发送本项目内容(红线优先于流程)⇒ 「未取得参考版 ≠ 已通过」,此处明示。 +8. 🔴 **目标目录名有一处分歧(沿用,未擅自动手)** —— 派活单写的目标目录是 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/`(**全称**),本棒产物就落在这里。而机制按 `goal.json` 的 `title` 推出的口径是 `title[:20]` 再去空格(如 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/` 恰好未超 20 字则两者一致,超了就会分岔)。⇒ `--report` 时台账**若**给软提醒(「`--artifact` 不在目标目录内」),属既有分岔、⛔ 不是拒收。 + - 本棒的处置:**按派活单写的落点落盘,不改名、不另建目录** —— 改名会推翻派活单,另建目录会多出一个没人认领的空壳,两种都属于「拿假设当依据扩大动作」。 + - 待用户裁定:正式归档搬进 `docs/pm/mcn-shortvideo-agent/` 时,按哪种口径命名目标目录。 + +--- + +## 九、说人话自评(本份文字部分;判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 10 | 开篇就写清「本轮改了哪五处」,§六 逐条给「现象 / 根因 / 证据 / 处置」,不绕 | +| 节奏 | 9 | 表格与叙述交替,§5.1/§5.2 用叙述把两条订正讲透,没有堆表 | +| 信任度 | 10 | 逐视口表与 V3 同值,明写「⛔ 不是沿用,是重跑后一致」并给出原因;窄屏三档红如实登记、不糊 | +| 真实性 | 10 | 每条都挂现取证据(自检行 / 变异编号 / 实测像素 / 脚本名);39 的逐页加总当面列出来可复核 | +| 精炼度 | 8 | 自检全文占了整节(85 行)—— 刻意留的原始凭据,但确实占地方,⚠️ 扣分点 | +| **总分** | **47 / 50** | 门槛 ≥45 ⇒ 过 | + +*(判据源:`E:/ProgramData/.workbuddy/skills/humanizer-zh`;门槛 45/50。⛔ 取不到来源时明写「无判据来源,本项未判」—— 本份取到了。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fc471a.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fc471a.md new file mode 100644 index 0000000..b3b1b8f --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/3b-实测记录__fc471a.md @@ -0,0 +1,289 @@ +# 3b 交互原型 · 实测记录(V3 · 导航改一层七项并 P8 并入复盘) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3b 子步产出 +> 落点:`执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/3b-实测记录.md` +> 本轮范围:按用户口径把**左侧导航压成一层七项**、把 **P8 记录与对账整页并入 P7 复盘台**、把**功能与板块的一一对应**做成可机检。 +> ⛔ 本份的数全部现取,**一个都不许凭记忆填**。数据源:`#/selftest` 全文 + `_tools/` 9 个脚本。 +> 🔴 取证全程走「只连不起」:本机 `9223` 常驻独立 Chrome(计划任务 `bh-chrome-keepalive` 保活),一个任务只开一个标签并复用,换视口走 `Emulation.setDeviceMetricsOverride`。 + +--- + +## 一、自检全文(1440×900,PASS 78 / FAIL 0) + +原样取自 `_tools/grab_selftest.py`,未删行、未改字。全文 84 行,此处逐条列。 + +``` +自检结果:PASS 78 / FAIL 0 + +PASS 路由 #/p/p1 渲染出 6 个顶层节点 +PASS 路由 #/p/p2 渲染出 6 个顶层节点 +PASS 路由 #/p/p3 渲染出 4 个顶层节点 +PASS 路由 #/p/p4 渲染出 5 个顶层节点 +PASS 路由 #/p/p5 渲染出 5 个顶层节点 +PASS 路由 #/p/p6 渲染出 4 个顶层节点 +PASS 路由 #/p/p7 渲染出 5 个顶层节点 +PASS 六态 × 七页 = 42 个组合,全部渲染出内容 +PASS 页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8) +PASS 导航一层七项:7 个功能项、一项一页,零组标 / 零跨组线(⛔ 没有第二层) +PASS 导航七项与用户口径逐字一致、顺序相同:首页 / 选题 / 创作 / 投放 / 复盘 / 账号 / 资产(资产排最后) +PASS 七页一次点击可达:侧栏 7 个功能项直达(⛔ 已撤销「功能入口」那一层,跨页入口只留在侧栏与板块内行级动作) +PASS 清单里每个 ID 都在页面上出现过(88 个,无悬空声明) +PASS 页面上每个 data-act 都在清单里(共 679 次出现,无未登记的可点元素) +PASS 清单里 84 个 ID 都真驱动过并给出可见反馈,0 个死控件(25 个场景,每个实例各重置一次) +PASS 当刻被禁用的控件 4 个(按契约在特定条件下不可点):P4-03, P5-06, P6-03, R-02 +PASS 清单里每个 ID 都至少被驱动过一次(无「从未跑过」的条目) +PASS 侧栏 7 个功能项逐个点过,每一项都落到了自己那一页 +PASS 五处「输入后才可用」的联动都通:其中 5 处在空输入时确实是禁用的 → 输入后转可用 → 点了有反应 +PASS P7「确认与改判」是回写的**前置开关**:未采纳时回写禁用、采纳后转可用(不是只留痕) +PASS 工具型纪律:零 .eyebrow / 零 .lead / 零 .hero +PASS 入场编排不做逐区块:@keyframes 共 0 处 +PASS 骨架冻结:七页 39 个板块的数量与顺序与新版 2b「业务板块清单」逐位一致,⛔ 未增删挪 +PASS 页面公共框架(Page Shell):七页各恰好 1 个,且都不带 .block / 不带 .block-head h2 ⇒ 不计业务板块数、不占冻结计数 +PASS 对象冻结:七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内(或显式「—」+说明),且与 OBJ_MAP 逐块一致 +PASS 功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立) +PASS 辅助入口区:每页最多 1 个跳转入口 ⇒ ⛔ 没有把流转表在框架层重写一遍 +PASS 「功能入口」那一层已撤销:.sect-nav / .data-card / .data-cards 在七页**逐页**出现 0 次(2b §九第 2 条) +PASS 结构 ①:七页各一个 h1,标题逐级不跳;每个板块都有文字标题 +PASS 结构 ②:字号 12/14/18/20/24px 共 5 档,相邻差 2/4/2/4,正文档 14–16 在用 +PASS 结构 ④:逐页查过,首屏同屏主档按钮 ≤1 个;本页实底按钮 1 种 +PASS 组件口径:七页都没有用内联 style 表达选中态或覆盖字号(选中态走 .is-on / .is-active,字号走 --fs-* 档) +PASS 交互态与可读性::hover / :focus-visible 都在且没被 outline:none 抹掉;tabular-nums、prefers-reduced-motion、防溢出三件套齐全 +PASS 阴影:面板/卡片都用多层叠层,无单层死黑重阴影 +PASS 间距:flex/grid 的 gap 取值全部落在登记刻度内(9 个刻度) +PASS 浮层「随手记」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(R-03) +PASS 浮层「随手记」打开后焦点在层内(当前=X-close) +PASS 浮层「随手记」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「随手记」Esc 能关 +PASS 浮层「随手记」关掉后焦点回到触发件 G-06 +PASS 浮层「随手记」点遮罩能关 +PASS 浮层「两处假设说明」中性关闭出口 = 1(右上 ×)|另有决策型关闭 0 个 +PASS 浮层「两处假设说明」打开后焦点在层内(当前=X-close) +PASS 浮层「两处假设说明」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「两处假设说明」Esc 能关 +PASS 浮层「两处假设说明」关掉后焦点回到触发件 G-08 +PASS 浮层「两处假设说明」点遮罩能关 +PASS 浮层「资产选择器」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(PICK-CANCEL) +PASS 浮层「资产选择器」打开后焦点在层内(当前=X-close) +PASS 浮层「资产选择器」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「资产选择器」Esc 能关 +PASS 浮层「资产选择器」关掉后焦点回到触发件 P4-04 +PASS 浮层「资产选择器」点遮罩能关 +PASS 浮层「发布二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(P5-10) +PASS 浮层「发布二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「发布二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「发布二次确认」Esc 能关 +PASS 浮层「发布二次确认」关掉后焦点回到触发件 P5-08 +PASS 浮层「发布二次确认」点遮罩能关 +PASS 浮层「核销二次确认」中性关闭出口 = 1(右上 ×)|另有决策型关闭 1 个(CHECKOUT-CANCEL) +PASS 浮层「核销二次确认」打开后焦点在层内(当前=X-close) +PASS 浮层「核销二次确认」连按 8 次 Tab,焦点始终锁在层内 +PASS 浮层「核销二次确认」Esc 能关 +PASS 浮层「核销二次确认」关掉后焦点回到触发件 P7-11 +PASS 浮层「核销二次确认」点遮罩能关 +--- 数值取证(布局视口 1440 × 900 ;window.innerWidth 1440)--- +PASS 对比度 --warn 对 --surface = 5.93:1(契约 ≥4.5:1) +PASS 对比度 --accent-text 对 --surface = 4.76:1(契约 ≥4.5:1) +PASS 对比度 --ink-faint 对 --surface = 3.55:1(契约 ≥3:1) +PASS 强调色填充面积占比:七页最高 创作台 = 0.52%(1 个填充块,契约 ≤5%) +量尺寸时滚动零点(P1):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P1) +PASS P1 账号矩阵:首屏从 669px 起,行距 31px,一屏装得下 7 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS P1 账号矩阵行高齐:31–31px,差 ≤2px +PASS P1 实际在用字号档 5 档:12px / 14px / 18px / 20px / 24px(契约 ≥3) +量尺寸时滚动零点(P2):window 0 / html 0 / body 0 / .view 0 +PASS 量尺寸前四个滚动容器都停在零点(P2) +PASS P2 对标内容列表:首屏从 505px 起,行距 31px,一屏装得下 12 行(契约 ≥6 行/900px 高,实测宽 1440)|示意数据 5 条 +PASS 横向溢出 = 0(scrollWidth 1440 = clientWidth 1440) +PASS 七页逐页查横向溢出:全为 0(最差 p1) +PASS 纵向滚动只由主区承担:.app 高 900px = 视口 900px;body 未承担滚动;主区 overflow-y auto,clientH 851 / scrollH 1435px(内容更高 ⇒ 主区可滚,折叠线以下的块拿得到) +(附)P1 行高 31/31/31/31/31px · 量时 scrollY=0 · 顶栏高 49px · 侧栏 128×350px · 主区 clientH 851 / scrollH 1435 +控制台报错:0 条 +``` + +**要盯的三条**(本轮主改动各自对应的判据,都在上面): +- 「页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8)」—— 治「P8 并入复盘」; +- 「导航一层七项…零组标 / 零跨组线」+「导航七项与用户口径逐字一致、顺序相同…(资产排最后)」—— 治「导航压平」; +- 「功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立)」—— 治「功能与板块对应」。 + +--- + +## 二、变异对照(24 条,24 / 24 通过) + +做法:把原型复制一份、注入**一处已知的假病**,再跑一次自检 ⇒ 必须报红、且红在**预期的那一条**上。测完即删临时件。基线(未注入)= `PASS 78 / FAIL 0`。 + +> 为什么必须有这一节:一个永远 PASS 的自检等于没有自检。只有「注病 → 报红 → 复原 → 回绿」这条链走通了,上面那 78 个 PASS 才算证据。 + +| # | 注入的假病 | 结果 | 红在哪 | +|---|---|---|---| +| M1 | 掏空 `P2-01` 的实现(点了没反应) | 77/1 ✅ | P2-01 | +| M2 | P2 表里塞一个没登记的 `data-act` | 75/2 ✅ | 未登记的 data-act | +| M3 | 清单里声明一个页面上没有的 ID | 75/2 ✅ | 声明了但页面里没有 | +| M4 | 给 P3 多塞一个板块 | 75/2 ✅ | 骨架与②段不一致 | +| M5 | 把 `--t-ink-faint` 调到契约线以下 | 76/1 ✅ | 对比度 | +| M6 | `go()` 退回「只改 hash」 | 75/2 ✅ | 驱动了没反应 | +| M7 | 只把 P1 表第一行撑高 | 76/1 ✅ | 行高不齐 | +| M8 | 表格行内衬 `4px → 36px` | 75/2 ✅ | 低于契约 6 行 | +| M9 | 量 P1 前先把主区滚下去 | 76/1 ✅ | 没回零点 | +| M10 | 给页框架副标题挂 `.lead` | 76/1 ✅ | 出现禁用类名 | +| M11 | 去掉浮层遮罩 | 70/7 ✅ | 没有遮罩 | +| M12 | `closeLayer` 退回「只清状态」 | 72/5 ✅ | 关掉后焦点没回到 | +| M13 | 每个浮层头部多加一颗 × | 72/5 ✅ | 中性关闭出口 = 2 | +| M14 | `.app` 高度退回 `min-height:100vh` | 76/1 ✅ | 高度链没约束住 | +| M15 | 分段控件加回内联 `border-color` | 76/1 ✅ | 内联 style 越权 | +| M16 | 导航第一项「首页」改成「首业」 | 76/1 ✅ | 导航项与用户口径不一致 | +| M17 | P1「账号矩阵」的对象改成字典外的名字 | 76/1 ✅ | 对象冻结出错 | +| M18 | P1 塞回一个 `.sect-nav` | 76/1 ✅ | 功能入口层的残留 | +| M19 | P1 页标题改成「矩阵总揽」 | 76/1 ✅ | 页标题 | +| M20 | 注释掉 `paint()` 里的 `focusIntoLayer()` | 72/5 ✅ | 打开后焦点不在层内 | +| **M21** | **往侧栏塞回一个 `.nav-group` 容器(第二层复活)** | 76/1 ✅ | 组标与跨组残留 | +| **M22** | **把 P8 加回页面表(独立页复活)** | 76/3 ✅ | 页面集合不是七页 | +| **M23** | **F12 的归属页从复盘改成投放(归属漂移)** | 76/1 ✅ | 功能与板块对不上 | +| **M24** | **摘掉 P4「录制卡片与画板」挂的 F14(悬空功能)** | 76/1 ✅ | 功能与板块对不上 | + +**加粗的四条是本轮新增的**(M21–M24),专给本轮两条新判据配对照:M21/M22 盯「导航一层七项 + 页集合没有 P8」,M23/M24 盯「功能 ↔ 板块一一对应」。 + +### 2.1 M22 返工两次 —— 「注入点写坏」与「判据报红」是两件事 + +第一次 `❌ 注入后自检跑不出来(连输出都没有)`。查下来**不是判据不灵,是我的注入点写坏了**: + +1. **第一版**:只往 `PAGES` 里塞了个 `p8` 键,没配渲染函数 ⇒ 自检第 1 步渲染 p8 时 `PAGE_FN['p8']` 是 `undefined`,渲染期直接抛错。 +2. **第二版**:补了渲染器,但没在 `STATE_COPY` 里登记 ⇒ 自检第 2 步「六态 × 页面」走到 `statePanel('p8')`,读 `STATE_COPY['p8'].loading` 报 `TypeError: Cannot read properties of undefined`。 +3. **第三版(现在这版)**:改在**启动行**注入 —— 那时 `PAGES` / `PAGE_FN` / `STATE_COPY` 三张表都已就位,一次把页、渲染器、状态文案配齐 ⇒ 报红且红在「页面集合不是七页」(连带「从侧栏到不了 p8」「p8 有 0 个 h1」两条)。 + +**顺带修了一处取证盲区**:原来 `renderSelftest()` 的兜底分支渲染的块**不带 `id="selftest-out"`** ⇒ 自检一崩,取证工具什么都读不到,变异对照只会得到一句「连输出都没有」,**分不清是注入点坏了还是自检自己炸了**。现在崩了也照正常格式吐一个 `#selftest-out`(head 行写 `PASS 0 / FAIL 1`,正文写栈)。这是这条返工留下的真收益 —— 下次谁再碰到,一眼能看见崩在哪一行。 + +--- + +## 三、闸门脚本(`_tools/`,共 9 个) + +| 脚本 | 判据 | 本轮结果 | +|---|---|---| +| `check_js.py` | `<script>` 段过 `node --check`;模板里的 HTML 注释不许出现反引号 | ✅ `PASS 语法:<script> 段 1394 行,node --check 通过` + `PASS 模板里的反引号…不含反引号` ⇒ 全过 | +| `check_skeleton.py` | ②段 `2b` §五 ↔ 原型 `FROZEN` 表,逐页逐位比(板块**数**相等、**顺序**相等、剥掉「(…)」注解后**逐字相同**) | ✅ `PASS 骨架冻结:七页 39 个板块,②段 2b-界面布局-新版.md §五 与原型 FROZEN 表逐页逐位一致` | +| `run_viewports.py` | 16 档逐视口|一屏行数 ≥6(`layouts-tooling.md` §1,⛔ 不分档) | ⚠️ `逐视口:不达标 3 / 共 16`(见 §五,一条登记项) | +| `mutate_test.py` | 24 条变异,每条都要求报红在预期处 | ✅ `变异对照:24 / 24 通过` | +| `run_shots.py` | 出 `_gate_shots/*.png` 视口帧(⛔ 不出整页长图) | ✅ `视口帧:成功 17 / 失败 0 / 共 17`;落盘 **16 个 PNG**(`P1-1440` 被「逐页」与「断点」两个循环各出一次、同名覆盖),PNG 尺寸当场逐个比对通过 | +| `cap.py` / `grab_selftest.py` | 单标签复用 + 自检轮询取值(IPC 读超时 5s,⛔ 不能 `wait_for_load`) | ✅ 两个跑通,无卡死 | +| `tab_close.py` | 收工清场 | ✅ 收工前已跑(见 §八) | + +**`check_js.py` 为什么单拎一条**:JS 模板字符串里的 HTML 注释不许出现反引号 —— 会提前闭合模板字面量、整页静默白屏,而 `node --check` **报不出来**。这条已经踩过四次。 + +--- + +## 四、骨架冻结的三条反向变异(外加本轮新配的两条) + +`check_skeleton.py` 的判据能在**正向**报 PASS,不代表它有牙齿。故另做反向变异:改②段副本、看闸门是否报红,验完即还原。 + +| 反向变异 | 改什么 | 期望 | 结果 | +|---|---|---|---| +| ① 板块名漂移 | ②段 P1 第 2 块「账号矩阵」→「账号矩阵一览」 | 报红 | ✅ | +| ② 板块数漂移 | ②段 P2 删掉一块 | 报红 | ✅ | +| ③ 顺序漂移 | ②段 P3 前两块对调 | 报红 | ✅ | + +**本轮新增两条**(骨架判据的两个分支要分着证,不能只证一条): + +| 新增 | 改什么 | 期望 | 结果 | +|---|---|---|---| +| ④ 页集合漂移 | 把 `p8` 加回页面表 | 报红 | ✅ M22(`页面集合不是七页`) | +| ⑤ 板块归属漂移 | 把 P7 的「对账核对区」挪到 P5 | 报红 | ✅ 自检「骨架与②段不一致」+ 闸门「p5 板块数 ②段 5 ≠ 原型 6」 | + +> ⚠️ **注一条假病、验完还原** 是这一步的纪律。有一个真实教训:`check_naming.py` 曾因 stale 变量(该用 `tt` 用了 `old`)导致「旧名提示」**恒不触发**(假绿)—— 判据写得再漂亮,不做变异对照就是自欺。 + +--- + +## 五、逐视口表(16 档) + +契约:一屏可见行数 **≥6 / 900px 高**,⛔ 不分档。`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 `9223` 已有实例,⛔ 不另起)。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1280×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1024×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1000×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 960×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 920×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 901×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 900×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 840×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 820×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 768×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 700×900 | 78/0 | 676px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 640×900 | 78/0 | 714px | 31px | 6 | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | 77/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | 77/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | 76/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档。** 行距在所有档恒为 `31px`、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(669 → 822px)。 + +### 5.1 一处订正:V2 记的成因不成立 + +V2 把这三档的成因记作「侧栏 `64 → 184px`(主区变窄)+ 新增 Page Shell 一层」。**本轮把侧栏收窄到 `128px` 之后重跑整表**: + +- P1 首行顶逐档**与 V2 完全相同**(`669 / 729 / 822px`),只有 `768×900` 一档由 `676 → 661px`; +- 侧栏尺寸由 `184×550` 变成 `128×350`。 + +⇒ **侧栏宽度不是成因**,「主区变窄」这半句划掉。剩下的是 **Page Shell 一层把 P1 首行顶抬高**,窄屏再因表格列换行加一截。这条订正是**实测数**,⛔ 不是推断。 + +### 5.2 一个数字错误,当场改掉并记账 + +改②段时我曾把板块总数写成 **41**(「P7 由 6 块变 10 块 ⇒ 39 → 41」)—— 这是**算错了**:P8 那 4 块搬进 P7,是**搬位置不是新增**,总数净变化为 0。真值由 `check_skeleton.py` 数出来是 **39**(`p1 5 / p2 5 / p3 4 / p4 6 / p5 5 / p6 4 / p7 10`)。 + +已在 `2b`(§〇/§九/§十/附自检)、原型注释、`check_skeleton.py` 注释里全部改为 **39**。**这条不藏** —— 文档里出现两套总数,比写错一个数更糟。 + +--- + +## 六、本轮动过的地方(逐条:现象 / 根因 / 证据 / 处置) + +| # | 现象 | 根因 | 证据 | 处置 | +|---|---|---|---|---| +| 1 | 导航是「三组 + 一个跨组入口」两层,与用户口径不符 | V2 按旧②段做;用户本轮重新定义为一层七项 | 用户原话「左侧导航应该是 首页 选题 创作 投放 复盘 账号」「P3 放导航 排最后」 | 删 `NAV_GROUPS` / `NAV_CROSS` 与 `.nav-group` / `.nav-group-label` / `.nav-cross` 及其 `≤640` 规则;改 `NAV` 数组 + `renderNav()`;自检 3a / 3b 重写 | +| 2 | P8「记录与对账」还是独立一页 | 用户本轮要求并入复盘 | 用户原话「P8 放复盘」「当然是功能也要放过去」 | 删 `pageP8`;四个板块接进 `pageP7`;动作 ID `P8-01…04 → P7-09…12`;`FROZEN.p7` 6 → 10 块;`PAGES` 八页收成七页;`_tools/run_shots.py` 的页表去掉 `p8` | +| 3 | 「功能与板块对应」只是口头要求,没有可机检判据 | ②段只声明归属判据,没逐块落点 | 用户原话「所有功能要和各自板块对应」 | 新增 `FN_HOME`(功能 → 归属页,逐字取 `2a` §四)+ `FN_MAP`(页 → 板块 → 功能);自检加 5b-3 双向查(无悬空功能、无孤立板块、每条功能的每个归属页上都得有它的板块) | +| 4 | 自检里没有「页集合是不是七页」这条判据 | 原来只逐页断言,不判**集合** | 本轮主改动就是「页集合里没有 P8」 | 新增 3a-0:比 `PAGES` 与 `FROZEN` 两张键集,页数 ≠ 7 或仍含 `p8` 都报红 | +| 5 | 侧栏 `184px` 的宽,理由消失了 | 那个宽度唯一的用途是容下**组名**;组名按用户口径撤掉 | 实测:收窄后 P1 首行顶逐档不变(§5.1) | 收窄到 `128px`;侧栏品牌名隐藏(顶栏已写全称);`.nav-item` 内衬 `0/12 → 0/8`。⚠️ **几何不在样式库内** ⇒ 这是③段的判断,**可推翻**,改一处 `--nav-w` 即回退 | +| 6 | 自检崩掉时取证工具全瞎 | `renderSelftest()` 的兜底分支没带 `id="selftest-out"` | M22 第一次 `❌ 注入后自检跑不出来(连输出都没有)` | 兜底分支改成照正常格式吐 `#selftest-out`(head 写 `PASS 0 / FAIL 1`,正文写栈) | +| 7 | 四份②段/③段文档里还留着八页与 P8 的痕迹 | 结构改了、文案没跟 | `grep -n "P8\|八页\|184"` 逐份复查 | `2a`/`2b`/`DESIGN.md` 逐处改到位:②段三处流转改指 P7、对象字典消费栏并入 P7、F12/F13 归属改 P7、状态清单与交互清单里的 `P8-xx → P7-xx`、`SP-01…SP-08 → SP-01…SP-07`(原型里的 `for(i=1;i<=8)` 也一并改成 7) | + +--- + +## 七、与上一版(V2 原型)的实质差别 + +1. **页集合**:八页 → **七页**。P8 记录与对账整页撤销,四个板块原样接进 P7 复盘台(P7 由 6 块变 10 块,板块总数**仍是 39**)。 +2. **导航**:三组 + 一个跨组入口 → **一层七项**(首页/选题/创作/投放/复盘/账号/资产),零组标、零跨组、零第二层。 +3. **导航项名与页的对应写死**:首页→P1、选题→P2、创作→P4、投放→P5、复盘→P7、账号→P6、资产→P3;**P5 在导航里叫「投放」,页面仍叫「发布中心」**(改名不扩功能)。 +4. **功能 ↔ 板块的一一对应变成可机检**(`FN_HOME` / `FN_MAP` + 自检 5b-3),不再是文档里的一句话。 +5. **侧栏几何**:`184px` → `128px`,品牌名在侧栏隐藏。 +6. **行动作 ID**:`P8-01…04` → `P7-09…12`;`SP-08` 撤销(页面操作区只有 7 个)。 +7. **自检**:77 项 → **78 项**(新增 3a-0),3a/3b 重写为「一层七项、零组标、项名照用户口径」;兜底分支改成吐可读输出。 +8. **变异对照**:20 条 → **24 条**(新增 M21–M24)。 +9. **②段/③段三份文档同步**:`2a` 升 V3、`2b` 升 V3、`DESIGN.md` 升 V3,均带「与上一版的实质差别」逐条。 + +--- + +## 八、遗留与待裁定(⛔ 不粉饰) + +1. **窄屏三档密度红**(`560×900` P1 5 行/`500×844` P1 3 行/`390×844` P1 0 行 + P2 5 行)。本轮已证明与侧栏宽度无关(§5.1)。是否动窄屏断点,**待用户裁定**,本棒不擅自改。 +2. **「满宽表格」与「一屏 ≥6 行」在窄屏不可兼得** —— 沿用上一版登记,未动。 +3. **P7 现在是一页两个主操作**(复盘那半「确认归因并回写」/记录那半「核销一条记录」)。②段 V3 §五 P7 已写明是两半,DESIGN.md §2.5 也写了「同屏只出当前上下文那一个」。⚠️ 这是**并页带来的新形态**,是否要在②段收口时再拆,留给用户。 +4. **②段自身一处内部不一致**(沿用):`2b` §五 P2 的板块清单把「灵感速记」列为第 5 块,同页信息分档表却把它标成「全局可达(不进板块)」。本版按**板块清单**实现,在此登记待②段收口时订正。 +5. **两处假设仍未获用户结论**(沿用):P1 的形态(待复核第 5 条)、P7 后半段「商单与收支」要不要进第一版(待复核第 6 条 + A3)。原型的「假设」徽章(`G-08`)可点开看复核人 / 时机 / 落点。 +6. **3c GPT 参考版本轮不做** —— 派活单明令不许向外发送本项目内容(红线优先于流程)⇒ 「未取得参考版 ≠ 已通过」,此处明示。 +7. 🔴 **目标目录名有一处分歧(沿用上一轮,未擅自动手)** —— 派活单写的新目标目录是 `执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/`(**全称**),本棒的产物就落在这里。而机制按 `goal.json` 的 `title` 推出的口径是 `执行会话/目标-导航改七项一层并重排功能归属(P8并入复-fc471a/`(**标题前 20 字**,与既往各目标目录一致)。两种情况并存 ⇒ `--report` 时台账给了一条**软提醒**(「`--artifact` 不在目标目录内」),⛔ 不是拒收。 + - 本棒的处置:**按派活单写的落点落盘,不改名、不另建目录** —— 改名的会推翻派活单,另建目录会多出一个没人认领的空壳,两种都属于「拿假设当依据扩大动作」。 + - 待用户裁定:正式归档搬进 `docs/pm/mcn-shortvideo-agent/` 时,按哪种口径命名目标目录。**与上一目标(`…-071c5b`)是同一个问题**,可一并定。 + +--- + +## 九、说人话自评(本份文字部分;判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 10 | 开篇就写清「哪三件改了什么」,M22 返工不留面子:标题直接叫「注入点写坏」不是「判据不灵」 | +| 节奏 | 9 | 表格与叙述交替,§5.1/§5.2 用叙述把两条订正讲透,没有堆表 | +| 信任度 | 10 | 数字写错(39 写成 41)当场记账不改稿;窄屏三档红如实登记、不糊 | +| 真实性 | 10 | 每条都挂现取证据(自检行 / 变异编号 / 实测像素 / 脚本名),无一处凭印象 | +| 精炼度 | 8 | 自检全文占了整节(84 行)—— 是刻意留的原始凭据,但确实占地方,⚠️ 扣分点 | +| **总分** | **47 / 50** | 门槛 ≥45 ⇒ 过 | + +*(判据源:`E:/ProgramData/.workbuddy/skills/humanizer-zh`;门槛 45/50。⛔ 取不到来源时明写「无判据来源,本项未判」—— 本份取到了。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__071c5b.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__071c5b.md new file mode 100644 index 0000000..0d21493 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__071c5b.md @@ -0,0 +1,430 @@ +# MCN 短视频整合营销工作台 · DESIGN.md(V2 · 按新版②段重做) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3a 子步产出 +> 本版是**第 4 步(按新版 2a/2b 重做界面)**的绑定规范。⛔ 不是给 V1 打补丁,是按新版骨架重出一版。 +> 落点:`执行会话/目标-梳理板块与操作路线,经GPT规划后重做②-071c5b/ui/DESIGN.md`(目标目录内;⛔ 未写域外 `docs/pm/`)。 +> 判据源:`product-planning/references/stage-delivery/SKILL.md`(含 §供给 / Gate-1)+ `references/execution-runbook.md` §2 + `references/layouts-tooling.md` §5.5。 +> 上一版原型只读对照:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/mcn-workbench.html` 与其 `DESIGN.md`。本版沿用其令牌与组件,⛔ 不覆盖旧版文件。 + +--- + +## 〇、开工声明(声明制,四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3a 视觉规范(D0 锚需求 → D1 定调 → Gate-1)→ 3b 原型 | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据)。挡位 **标准** | +| 依据文件 | `stage-delivery/SKILL.md` §供给 + §3a/§3b;`execution-runbook.md` §2;`layouts-tooling.md` §0/§1/§5.5;②段 `2a-产品功能-新版.md`/`2b-界面布局-新版.md` | +| 产出落点 | `ui/DESIGN.md`(本份)、`ui/mcn-workbench.html`(3b)、`ui/_tools/`、`ui/_gate_shots/` | + +### 供给核对(runbook §2.0 · 步 −1,每轮必做) + +| 步 | 动作 | 结果 | +|---|---|---| +| −1 | 确认 §供给 三处在位 | ✅ `references/layouts-tooling.md`、`references/execution-runbook.md` 都在位;定调与令牌档在位 1 套 `assets/design-systems/design-system-tiaoyue/` | +| −1b | 套名与上一版记录比对 | ✅ 上一版 `DESIGN.md` 选定 `design-system-tiaoyue`,本版**沿用同一套**(用户 2026-10-07 令「每次设计只选一套」)⇒ 不触发变更清单 | +| −1c | 可选档是否动用 | ⛔ **未动用** `assets/open-design/`(随后续口径可选)。它独有的四项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)**本次无逐项数值供给来源** —— 见 §五 缺口 1,⛔ 没有凭感觉编一套顶上 | + +### 页型判定(硬前置,SKILL.md §3b) + +**全部 8 页都是工具型页面。** 依据:用户是天天来干活的 MCN 团队,每页都有人在里面完成一件事(决定先处理哪件 / 挑一条选题 / 存一条拆解 / 推一个环节 / 确认一次发布 / 改一份画像 / 写一条归因 / 核销一条记录);没有一页是让人「看一眼就下决心」。 +⇒ 本份零 `.eyebrow`、零 `.lead`、零 `.hero`,且 `body.is-marketing` 之外的类名一个不设。与②段 `2b` §二「本产品是工具型页面,不是营销页」一致。 + +--- + +## 一、设计契约(十二个字段) + +### 1.1 项目级字段 + +**① 主用户**:MCN 机构的内容负责人(矩阵级决策)、编导与文案(选题与创作)、剪辑与投放(版本与发布)。依据①段 `1c-用户画像.md`(零访谈画像 —— 局限已登记在旧版 §四缺口 4,本版沿用)。 + +**② 主操作**:**逐页唯一**,照②段 `2b` §五 各页「主操作」原样落,本段未改一个(逐页见 1.2)。 + +**③ 必要内容(核对面)**:②段信息分档表逐页核对,见 1.2。只做**落位核对**(主屏常驻=零点击可见,可点入=一次点击可达),⛔ 不以它为由增删档位。 + +**④ 重复项的信息量**:四个主列表(账号矩阵 / 对标内容 / 资产条目 / 发布记录)是**满宽表格**,每行除「主标识 + 动作」外都带次级信息,逐页列在 1.2。 + +**⑤ 结构骨架(翻译面)**: + +- **骨架档:主区 + 侧区**。理由:一级导航覆盖 8 个目的地、宽屏 ≥1024;选定套的外壳本身就是「侧栏 + 主区」的应用型外壳,两者同构。 +- **导航层级:两层 —— 3 个业务组 + 1 个跨组入口**(2026-10-09 按 `2b` §三 与 §九 第 4 条重做)。上一版③段做成了「一层八项平铺」,而②段写的是三组+跨组 —— 那正是 `2b` §九第 4 条点名的现状 `D3`,本版改回来: + - 组一 **找选题**:P2 选题雷达、P3 资产库 + - 组二 **走创作流水线**:P4 创作台、P5 发布中心 + - 组三 **看矩阵复盘**:P1 矩阵总览、P7 复盘台、P8 记录与对账 + - **跨组 账号画像(P6)**:它不是第四个业务组,是全局上下文能力,在侧栏**底部单独一段**、与三组之间用一条发丝线隔开,并带「跨组」小标。 + - 组名**逐字取 `2b` §三**(找选题/走创作流水线/看矩阵复盘),⛔ 本版没有顺手改名(GPT 建议的「① 选题与洞察/② 创作与发布/③ 矩阵与增长」②段未采纳,本段不越权替它采纳)。 + - **项短名沿用②段现成的 2 字档**(总览/选题/资产/创作/发布/画像/复盘/对账),⛔ 本版没有改短名。组名与短名怎么对应是②段 §十 待确认项 1,本段不替用户定。 +- **侧栏形态:拉长成带组标的圆角浮栏(宽 `184px`)**。这是一处**相对上一版的显式改动**,理由与备选一并写在这里: + - 上一版是 `64px` 药丸浮栏(照选定套 `app-sidebar` 的 `w-16` 实测)。它的项内容宽只有 `24px`,**放不下任何组名** —— 用它就表达不出「三组」,只能靠分隔线暗示,那不算「回到三组」。 + - 本版把栏加宽到 `184px`,保住选定套的**圆角浮栏**性格(圆角 `24px`、淡底、1px 淡描边、四周留白、随内容高、在列内垂直居中),并容下「组名一行 + 项若干」。⛔ 没有引入第二套配色或第二套圆角 —— 令牌全部来自 `design-system-tiaoyue`。 + - ⚠️ **几何不在样式库内**(§供给 明写「自带样式库实测只到调色板级」)⇒ 栏宽是③段的判断,不是从包里抄的。备选:保 `64px` + 组间发丝线(不写组名)。若用户要后者,改**一处** `--nav-w` 与 `renderNav()` 即可(见 §七 修订记录)。 +- **每页收口形态(八页统一)**:`页面公共框架(Page Shell)` → `业务板块若干(从上到下)`。⛔ 本版**撤销**上一版那层「功能入口卡」(`.sect-nav` / `.data-cards` / `.data-card`):`2b` §一第 2 条与 §九第 2 条明令撤掉,它的文字本来就是流转表的副本。撤掉之后,跨页入口只留在两处:**侧栏**(八页一次点击可达)与**业务板块内的行级动作**(流转表就落在那里)。 +- **密度目标:密集(8–32)**。理由:8 页都是一屏要放多行记录的工具型页面,`2b` P1 要求矩阵与今日待办**同时**常驻,宽松档放不下。同一页面只取这一档。 +- 块间距 ≥ 块内间距的 2 倍:块间 `32px`、块内 `8/12/16px` ⇒ 比值 2.0–4.0 ✅。 + +**⑥ 交互清单**:见 §二 表 2.4(逐元素四列)。**它是唯一的交互真相源** —— 3b 实测、自检、变异对照都引这一张,⛔ 不另建一份。 + +**⑦ 状态覆盖六项**:见 1.3,逐页逐项有结论。 + +**⑧ 组件来源**:优先沿用选定套既有组件族,其次自创。⛔ 未参考 `teamOnly: true` 的族。清单见 §二 表 2.5。 + +**⑨ 响应式行为**: + +| 断点 | 布局怎么变 | +|---|---| +| `>1024` | 侧栏 `184px` 圆角浮栏常驻(⛔ 宽度不随断点变)+ 主区 `minmax(0,1fr)` | +| `1001–1024` | 侧栏仍 `184px`;两栏分栏与满宽表格都不变;顶栏间距收到 `8px`;顶栏不折行 | +| `901–1000` | 同上,另:统计条最小宽 `132 → 96px`(4 格不折行) | +| `821–900` | 上述继续;另:两栏分栏 `.grid-main-side` → 单列(右栏被挤到 300px 以下就会折行) | +| `641–820` | 上述继续;另:统计条、表格列宽由 `auto` 收窄,主区内衬 `32 → 16px` | +| `≤640` | 侧栏**变成页头下方一条可横向滚动的标签条**(⛔ 不隐藏);组名并入标签条的分组段标;项高 `36px`;主区单列 | + +**滚动容器**:整页不滚、**只有主区 `.view` 滚**。高度链三件套必须齐:`.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`。少写一处 ⇒ 整页「滚不动」而不是「不滚」(上一版踩过并留档)。**判滚动四个容器都要核**:`window`/`html`/`body`/`.view`。 + +**⑩ 明确拒绝的模式**(≥3 条,每条可判定): + +1、⛔ 不出现「眉标/大标题/灰色副标题」三段式标题区(判据:DOM 里 `.eyebrow` / `.lead` / `.hero` 三个类名出现次数为 0)。 +2、⛔ 不用围合边框假装分组(判据:非控件元素里 `border` + `border-radius` 同时出现在同一「分组」用途上 ≥3 次即判不过;结构性容器靠底色差 + 多层阴影分层)。 +3、⛔ 不给列表行套框、不给状态上整行底色(判据:行间只用 `border-top`;状态只出现在 `tag` 内)。 +4、⛔ 不做**逐区块**入场编排(判据:`@keyframes` 至多 1 处;过渡只用 `transition`,⛔ 不用 `linear` / `ease`)。 +5、⛔ 不可点的东西不长成可点样子(判据:页面里所有 `button` / `[role=button]` / `.btn*` 集合与 §二 表 2.4 的元素列做双向差集,差集为空)。 +6、⛔ **不用内联样式表达「选中态」或覆盖「字号」**(判据:八页里 `[style*=border-color]`、`[style*=color]`、`[style*=font-size]` 的出现次数**都为 0**)。选中态全站**只有一套画法**:`.is-on` / `.is-active`(整块浅紫底 + `--accent-text` + 字重 600);字号只许走 `--fs-*` 七档。 +7、⛔ **页面公共框架不许进板块计数、不许参与功能归属、不许占对象冻结计数**(判据:`.block` 数逐页等于 `FROZEN`;`.page-shell` 自身不带 `.block` / 不带 `.block-head h2`)。 +8、⛔ **辅助入口区不许把流转表再写一遍**(判据:每页 `.shell-aux` 里的 `[data-page]` 元素 ≤1 个)。 + +**⑪ 验收标准(可观察可判定)**: + +- 八页各自可达(`#/p/p1` … `#/p/p8` 直接打开都渲染出该页内容,不是空壳)。 +- 表 2.4 每一行的「触发 → 反馈」都真发生过,无死按钮。 +- 六态在每一页都能被看到(正常 / 加载 / 空 / 错误 / 禁用 / 无权限)。 +- 宽视口 `1440×900` 与窄视口各留截图,横向溢出为 0。 +- 页面上每个可点元素都能在表 2.4 里查到;表里没有的可点元素为 0。 + +**⑫ 明确拒绝的「编造」**:界面上不出现「示例 / 示意图 / 未接入 / 待核实」这类制作说明;也不把机器结论说成人已认可(如把「疑似原因」写成「已确认原因」)。 + +### 1.2 逐页字段(页面职责 / 主操作 / 必要内容落位 / 重复项信息量) + +| 页 | 页面职责 | 主操作(唯一) | 必要内容的落位核对 | 重复项的次级信息 | +|---|---|---|---|---| +| P1 矩阵总览 | 让内容负责人在 1 分钟内决定**今天先处理哪一件** | 挑一件待办并进到那一件事 | 账号矩阵、今日待处理=零点击可见;异常值、本月最好、全局检索=一次点击可达 | 账号行=账号名 + 今日该发/已发/效果 + 异动标 | +| P2 选题雷达 | 让编导在 3 分钟内**找到一条能做的选题** | 把一条选题推进下一步 | 对标监控概览、对标内容、选题库=零点击可见;评论区洞察、灵感速记=一次点击可达 | 对标行=标题 + 账号 + 倍数 + 时间;选题行=选题 + 来源 + 状态 | +| P3 资产库 | 让编导在 2 分钟内**存一条拆解结果、或引用一条已存的** | 入库一条 / 引用一条 | 分区切换、资产条目=零点击可见;单条详情、引用入口=一次点击可达 | 条目行=条目摘要 + 出处 + 草稿/已入库 + 采集时间 | +| P4 创作台 | 让编导在一条内容上**把当前环节推到下一环节** | 推进到下一环节 | 创作流程、当前环节工作区、AI 产出与采纳、当前内容上下文=零点击可见;资产引用、版本管理、录制卡片与画板=一次点击可达 | 版本行=vN + 语义名 + 时间 + 当前标记 | +| P5 发布中心 | 让投放**确认发出这一批版本** | 确认发布 | 检查结果、各版本与逐版编辑、确认发布=零点击可见;目标选择、发布记录=一次点击可达 | 版本行=账号/平台 + 字数 + 检查结论 | +| P6 账号画像 | 让内容负责人**改好并保存一个账号的画像** | 保存这一份画像 | 画像六维、账号列表=零点击可见;记忆条目、关联内容=一次点击可达 | 账号行=账号名 + 平台 + 内容数;记忆行=日期 + 来源 + 一句话 | +| P7 复盘台 | 让内容负责人**确认归因并写回这个账号** | 确认归因并回写 | 表现数据、归因结论、确认与改判、待复盘项、回写目标提示=零点击可见;历史复盘=一次点击可达 | 待复盘行=内容 + 发布账号 + 发布日 + 数据到没到 | +| P8 记录与对账 | 让投放**核销一条发布记录** | 核销一条记录 | 发布记录、对账核对区=零点击可见;单条溯源、商单与收支=一次点击可达 | 记录行=内容 + 确认人 + 时间 + 版本 + 状态 | + +### 1.3 状态覆盖六项(逐页给结论) + +判据源:`SKILL.md` 铁律 2 的六态清单。⚠️ 逐项**数值判据**出自供给可选档 `craft/state-coverage.md`,本轮未动用可选档 ⇒ **该项本次无供给来源**,故只给「有没有、长什么样」的结论,不编阈值。 + +| 页 | loading | empty | error | success | disabled | 无权限 | +|---|---|---|---|---|---|---| +| P1 | ✅ 矩阵数据加载中(骨架行) | ✅ 还没接入账号(给「去账号画像建第一个账号」) | ✅ 数据源不可用(显时间戳 + 重试) | ✅ 默认态 | ✅ 无可处理项时待办区禁用并说明 | ✅ 非管理员看利润字段时的遮罩说明 | +| P2 | ✅ 拉取对标中 | ✅ 监控名单为空(给「录一个对标号」) | ✅ 拉取失败(退路=手工录入) | ✅ 默认态 | ✅ 未选账号时「转入创作」禁用 | ✅ —(不适用:本页对所有角色开放) | +| P3 | ✅ 条目加载中 | ✅ 该分区还没有条目(给「去拆解一条」) | ✅ 读取失败(重试) | ✅ 默认态 | ✅ 无出处条目「入库」禁用(门禁) | ✅ —(不适用) | +| P4 | ✅ 环节生成中 | ✅ 该环节还没产出(给「开始这一步」) | ✅ 本步失败(保留已产出 + 重试该步) | ✅ 默认态 | ✅ 文案与封面缺一,「进检查态」禁用(封面缺只提示;F6 守卫) | ✅ —(不适用) | +| P5 | ✅ 检查中 | ✅ 还没有可发布的版本(回 P4) | ✅ 检查自身失败 ⇒ **按不过处理**(fail-closed) | ✅ 无硬拦、可发 | ✅ 有硬拦项时「确认发布」禁用 | ✅ 未授权账号的版本标「无发布权限」并禁用该版 | +| P6 | ✅ 画像加载中 | ✅ 还没有画像(给「建画像」) | ✅ 保存失败(保留编辑内容) | ✅ 保存成功提示 | ✅ 只读角色时字段禁用 | ✅ 非本人负责账号:可看不可改 | +| P7 | ✅ 读数据中 | ✅ 还没有可复盘的内容 | ✅ 数据读不到 ⇒ 转手工录入表现 | ✅ 回写成功提示 | ✅ **未确认归因(`confirmed` 未置)时「回写」禁用**(F10 前置开关) | ✅ —(不适用) | +| P8 | ✅ 记录加载中 | ✅ 还没有发布记录 | ✅ 读取失败(重试) | ✅ 核销成功 | ✅ 未选中记录时「核销」禁用 | ✅ 利润列对非管理员隐藏(列级遮罩) | + +> 口径:`disabled` 与 `无权限` 是两件事 —— 前者是「当前条件不满足」(自己能解开),后者是「角色不允许」(自己解不开)。界面文案分开写,⛔ 不拿「不可用」一句话糊过去。 + +--- + +## 二、令牌表 + +### 2.1 三层结构(`primitive → semantic → component`) + +组件层只引语义层,语义层只引 primitive;⛔ 无孤立 token。 + +### 2.2 色值(来源=选定套 `design-system-tiaoyue` 亮色基线 · 9 页 clipper 实测) + +| 语义 token | 值 | 用途 | +|---|---|---| +| `--paper` | `#faf9f5` | 页面底(暖白纸感) | +| `--surface` | `#ffffff` | 面板 / 卡片底 | +| `--surface-soft` | `#f7f6f1` | 次级面(表头、只读块、侧栏组标底) | +| `--ink` | `#1a1a18` | 主文字 | +| `--ink-mute` | `#57564f` | 次级文字 | +| `--ink-faint` | `#8a887f` | 三级文字 / 占位 / 组标(⛔ 只用于非正文) | +| `--line` | `#e7e5dc` | 分隔线(行间 `border-top`) | +| `--line-soft` | `#efeee7` | 更弱的分隔(块内) | +| `--accent` | `#9E4CFF` | 主强调色(品牌紫) | +| `--accent-text` | `#963dff` | accent 当**文字**时用这一档 | +| `--on-accent` | `#FFFFFF` | 主色上的文字 | +| `--ok` | `#3d7a4f` | 成功态 | +| `--err` | `#b4453a` | 错误态 | +| `--warn` | `#8a5a00` | 提醒 / 异常值 / 软劝。**本项目追加**:选定套亮色基线没有 warn 档,而②段 P5 要求「硬的拦住、软的只提醒」要有两种可见区分 ⇒ 新增一档并登记实测对比度 | + +**强调色允许位置**:① 主按钮填充底;② 侧栏当前项与分段控件选中项的**整块浅底**;③ 链接文字(用 `--accent-text`);④ 焦点环。⛔ 不允许出现在页面大背景、卡片底、图标填充(除主按钮内图标)、任何渐变。全屏面积 ≤5%。 + +**禁止**:⛔ 无紫→粉渐变;⛔ 无装饰性发光;⛔ 状态色只用红/绿/黄三系,不做装饰。 + +### 2.3 几何 · 字体 · 间距 · 字阶 · 高度层级 · 脚手架 + +| 项 | 值 | 来源 / 说明 | +|---|---|---| +| 字体 | `"PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans SC", sans-serif` | 选定套实测:源站 `@font-face` 为 0 条,走系统字体栈 | +| 标题字体(展示体) | `"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走黑体栈);字重 ≤600 | 沿用上一版方案 A:宋体标题 + 黑体正文=两族对照,符合「字族 ≤2–3」。⛔ 未用 Inter / Roboto / `system-ui` 关键字 | +| 等宽数字 | `font-variant-numeric: tabular-nums` | 所有数字列,防刷新抖动 | +| 圆角 | 大容器 `24px`/面板 `16px`/行与小件 `14px`/输入框 `9px`/按钮 `26px`(药丸) | 全部取自选定套 | +| 间距 · 主刻度 | `4 / 8 / 16 / 24 / 32 / 64` | 供布局。块间用 32,块内 8/12/16 | +| 间距 · 微网格 | `2 / 4 / 6 / 8 / 12` | **仅供**按钮内衬、徽章内衬、图标间隙 | +| 块间距 / 块内间距 | 32 / 8–16 ⇒ 比值 2.0–4.0 | 判据要求 ≥2 ✅ | +| 字阶定值表(七档) | `--fs-12` 12 / `--fs-14` 14 / `--fs-16` 16 / `--fs-18` 18 / `--fs-20` 20 / `--fs-24` 24 / `--fs-30` 30 | 相邻差 2/2/2/2/4/6 全部 ≥2 ✅;每档只一个定值 | +| 高度层级(每层多层叠层) | L1(行/内嵌):`0 1px 1px rgba(26,26,24,.03), 0 2px 6px -2px rgba(26,26,24,.06)`<br>L2(面板):`0 1px 2px rgba(26,26,24,.04), 0 8px 20px -12px rgba(26,26,24,.14), 0 18px 40px -18px rgba(26,26,24,.10)`<br>L3(浮层):`0 2px 4px rgba(26,26,24,.05), 0 14px 32px -12px rgba(26,26,24,.18), 0 32px 64px -24px rgba(26,26,24,.16)` | 每层 ≥2 层叠层 ✅ | +| 布局脚手架 | 侧栏 `184px` 圆角浮栏(随内容高、列内垂直居中)+ 主区 `minmax(0,1fr)`;主数据块走满宽表格(`.ds-table.tbl-dense`);两栏分栏 `.grid-main-side` 宽比 `1.35fr : .9fr` | 骨架档=主区+侧区,已落到具体列宽 | +| 容器与对齐锚点 | 主区左右内衬 `32px`;表格与块标题左锚点同一条线;数字列右对齐且右锚点对齐块右内衬 | 判据要求「对齐锚点」写明 | +| 浮层 | 居中面板,宽 `min(560px, calc(100vw - 32px))`,内衬 `24px`;**只有一个可见关闭出口**(右上 ×);遮罩与 `Esc` 也可关,但不计为可见出口 | 满足 Gate-3「可见关闭出口唯一」 | + +### 2.4 交互清单(唯一交互真相源 · 四列) + +**通用规则**(适用于下面所有浮层):每个浮层**只有一个可见关闭出口**(右上 ×,ID `X-close`);遮罩点击(`X-mask`)与 `Esc` 也能关,但**不视为可见出口**;关闭后焦点回到触发它的那个按钮,Tab 只在层内循环。下表不逐浮层重复这三条。 + +| ID | 元素 | 触发 | 反馈 | 何时不可点 | +|---|---|---|---|---| +| G-05 | 侧栏八个功能项(3 组 + 跨组,构成两层:组 + 项) | 点击 | 切到该页(hash 变、主区重绘);当前项转整块浅紫底 + `--accent-text` + 600 | 从不可点 | +| G-06 | 顶栏「随手记」 | 点击 | 打开随手记浮层,焦点进输入框 | 从不可点 | +| G-08 | 两处「假设」徽章(P1 页头 / P8「商单与收支」块头) | 点击 | 打开假设浮层(逐条给复核人 / 时机 / 落点) | 从不可点 | +| X-close | 各浮层右上 × | 点击 | 关闭浮层;焦点回触发它的按钮 | 从不可点 | +| X-mask | 浮层遮罩(层外空白区) | 点击 | 关闭浮层;焦点回触发它的按钮 | 没有浮层时不渲染 | +| SP-01…SP-08 | 各页**页面操作区**的页面级操作(刷新本页数据) | 点击 | 提示「已刷新本页数据」;不改数据 | 从不可点 | +| STATE-NORMAL | 状态面板 ·「回到正常内容」 | 点击 | 该页回 `ok` 态,主操作恢复 | 仅在非 `ok` 态出现 | +| STATE-RETRY | 出错态 ·「重试一次」 | 点击 | 提示已重试(示意);不改数据 | 仅在 `error` 态出现 | +| STATE-GO | 空态 ·「去〈某页〉」 | 点击 | 跳到该页;面板关 | 仅在 `empty` 态且该页定义了去处时出现 | +| R-01 | 随手记浮层 · 输入框 | 输入 | 内容非空时「保存」由禁用转可用 | 从不可点(可输入) | +| R-02 | 随手记浮层 · 保存 | 点击 | 写入选题库「待做」;提示 1.5s 后消失;浮层关闭 | 输入为空时 `:disabled` | +| R-03 | 随手记浮层 · 取消 | 点击 | 关闭,不写入;焦点回触发按钮 | 从不可点 | +| A-01 | 假设浮层 · 两处假设条目 | 展示 | 只读,逐条给复核人 / 时机 / 落点 | 不适用(只读,非控件) | +| P1-01 | 今日待处理项(每条) | 点击 | 跳到该待办所属的页(选题类→P2、在写→P4、待审→P5、待复盘→P7、待核销→P8) | 从不可点 | +| P1-02 | 账号矩阵行名 | 点击 | 跳到 P6 并选中该账号(传 `accountId`) | 从不可点 | +| P1-03 | 账号矩阵行 ·「看复盘」 | 点击 | 跳到 P7 并选中该账号的待复盘内容(传 `accountId`) | 该账号没有可复盘内容时禁用 | +| P1-04 | 异常值提示条目 | 点击 | 跳到 P2 并带 `filter=异常值` 定位(传 `benchmarkId`) | 无异常值时整块显示空态 | +| P1-05 | 本月最好的一条 | 点击 | 跳到 P7 的该条复盘 | 无数据时禁用 | +| P1-06 | 全局检索 · 输入框 | 输入 | 结果列表按关键字过滤;无结果显示空态行 | 从不可点(可输入) | +| P1-07 | 全局检索 · 结果项 | 点击 | 跳到该结果所属的页;关键字清空 | 无结果时不渲染可点项 | +| P2-01 | 监控概览 ·「低粉爆款」数 | 点击 | 筛选对标内容列表(只看爆款) | 数为 0 时禁用 | +| P2-02 | 监控概览 ·「异常值」数 | 点击 | 筛选对标内容列表(只看异常) | 数为 0 时禁用 | +| P2-03 | 对标内容行 ·「发起拆解」 | 点击 | 跳到 P3 并带 `benchmarkContentId`(预填原文与出处) | 从不可点 | +| P2-04 | 评论区洞察 · 展开/收起 | 点击 | 展开子区并开始抓取(显示抓取中) | 从不可点 | +| P2-05 | 评论区洞察 ·「抓取评论」 | 点击 | 进入抓取中 → 出候选选题列表 | 抓取中时禁用 | +| P2-06 | 候选选题 ·「采纳」 | 点击 | 该条进选题库「待做」;候选行标为已采纳 | 该条已采纳时禁用 | +| P2-07 | 候选选题 ·「忽略」 | 点击 | 候选行标为已忽略(可恢复) | 该条已忽略时禁用 | +| P2-08 | 选题库 · 分组 tab(待做/在写/已用) | 点击 | 列表切换成该组 | 从不可点 | +| P2-09 | 选题行 ·「转入创作」 | 点击 | 建/切当前 `Content` 并跳到 P4;选题转「在写」(流转 8) | 未选账号时禁用(行内说明) | +| P2-10 | 选题行 ·「拆解」 | 点击 | 跳到 P3 并把该选题当素材 | 从不可点 | +| P2-11 | 灵感速记 ·「记一条」 | 点击 | 打开随手记浮层(与 G-06 同一个层) | 从不可点 | +| P2-AUX | 辅助入口区 ·「开始创作」 | 点击 | 跳到 P4(不带条目,落在当前内容上) | 从不可点 | +| P3-01 | 分区切换 tab(角度/结构/开场白/标题) | 点击 | 条目列表换成该分区 | 从不可点 | +| P3-02 | 条目行 | 点击 | 右区显示单条详情(原文 / 出处 / 草稿标记) | 从不可点 | +| P3-03 | 单条详情 ·「入库」 | 点击 | 无出处条目被门禁挡并说明原因;有出处的转「已入库」 | **无出处或原文缺失时禁用**(门禁) | +| P3-04 | 引用入口 ·「引用到创作台」 | 点击 | 跳到 P4 并把该条目加进资产引用区(流转 9) | 从不可点 | +| P4-01 | 创作流程 · 七个环节(逐项) | 点击 | 切到该环节;只许回退到已完成的环节 | 未到达的后续环节禁用 | +| P4-02 | 当前环节工作区 · 内容输入框 | 输入 | 「开始这一步」由禁用转可用 | 从不可点(可输入) | +| P4-03 | 当前环节工作区 ·「开始这一步」 | 点击 | 生成中 → 产出写进「AI 产出与采纳」(⛔ 不进正文) | 输入为空时禁用 | +| P4-04 | 资产引用 ·「从资产库拿一条」 | 点击 | 展开选择器;选中后收进引用区并显示来源 | 资产库为空时禁用并说明 | +| P4-05 | 资产引用 ·「移除引用」 | 点击 | 从引用区移除该条 | 引用区为空时不渲染 | +| P4-06 | 「推进到下一环节」 | 点击 | 当前环节 +1;流程与工作区跟着变 | 文案与封面缺一、进检查态时禁用(封面缺只提示;F6 守卫) | +| P4-07 | AI 产出与采纳 ·「采纳」 | 点击 | 机器产出并入本环节正文 | 无未裁决产出时禁用 | +| P4-08 | AI 产出与采纳 ·「驳回」 | 点击 | 正文不变;产出标为已驳回 | 无未裁决产出时禁用 | +| P4-09 | AI 产出与采纳 ·「改后再用」 | 点击 | 保留人的版本;产出标为改后再用 | 无未裁决产出时禁用 | +| P4-10 | AI 产出与采纳 ·「中断生成」 | 点击 | 停掉本步生成 | 仅在生成中出现 | +| P4-11 | 版本管理 ·「按账号 × 平台展开」 | 点击 | 母版展开出多版本(每个版本绑一个账号 + 一个平台,F7) | 未到成稿态时禁用 | +| P4-12 | 版本管理 · 版本行「切为当前版」 | 点击 | 该版标为当前版;当前内容上下文的版本号跟着变(F8) | 该版已是当前版时禁用 | +| P4-13 | 录制卡片与画板 ·「生成卡片」 | 点击 | 成稿态生成一张卡片(F14) | 未到成稿态时禁用 | +| P4-14 | 录制卡片与画板 ·「同步到画板」 | 点击 | 卡片落到画板,可打开 | 还没有卡片时禁用 | +| P4-AUX | 辅助入口区 ·「查账号口径」 | 点击 | 跳到 P6 并选中当前账号(流转 11) | 从不可点 | +| PICK-ASSET | 资产选择器 · 单条 | 点击 | 收进引用区并显示来源;浮层关 | 已引用过的不渲染可点项 | +| P5-01 | 目标选择 · 展开/收起 | 点击 | 展开账号与平台多选 | 从不可点 | +| P5-02 | 目标选择 · 账号项 | 点击 | 勾选/取消;版本列表跟着增删一版 | 从不可点 | +| P5-03 | 目标选择 · 平台项 | 点击 | 勾选/取消;同上 | 从不可点 | +| P5-04 | 各版本 · 版本 tab(逐版) | 点击 | 右区换成该版内容 | 从不可点 | +| P5-05 | 版本内容编辑框 | 输入 | 「保存本版」由禁用转可用;标为「已改」 | 从不可点(可输入) | +| P5-06 | 版本内容 ·「保存本版」 | 点击 | 该版内容更新;检查结果跟着重算(回到未检) | 无改动时禁用 | +| P5-07 | 检查结果 ·「复检」 | 点击 | 检查中 → 出结论(硬拦 / 软劝 / 通过) | 检查中时禁用 | +| P5-08 | 「确认发布」 | 点击 | 打开二次确认浮层 | **有硬拦项时禁用**;无版本时禁用 | +| P5-09 | 二次确认 ·「确认发出」 | 点击 | 写发布记录(P8 出现一条);提示成功(流转 14) | 从不可点 | +| P5-10 | 二次确认 ·「取消」 | 点击 | 关闭浮层,不发;焦点回触发按钮 | 从不可点 | +| P5-11 | 发布记录 · 记录行 | 点击 | 跳到 P8 并定位该记录 | 从不可点 | +| P6-01 | 账号列表项 | 点击 | 切换右区画像 | 从不可点 | +| P6-02 | 画像六维字段(6 个输入) | 输入 | 「保存画像」由禁用转可用 | 非本人负责账号时禁用(改由角色判定) | +| P6-03 | 「保存画像」 | 点击 | 保存成功提示;未保存时离开给提示 | 无改动时禁用 | +| P6-04 | 记忆条目 · 展开/收起 | 点击 | 展开记忆列表(只追加,不可编辑) | 从不可点 | +| P6-05 | 关联内容行 | 点击 | 跳到 P4 的该条内容 | 无关联内容时整块空态 | +| P7-01 | 待复盘项 | 点击 | 右区换成该条的表现数据 | 从不可点 | +| P7-02 | 表现数据 ·「手工录入」 | 点击 | 数据读不到时的降级入口,展开输入 | 数据已读到时不渲染 | +| P7-03 | 归因结论 · 文本 | 输入 | 「采纳这条归因」由禁用转可用 | 从不可点(可输入) | +| P7-04 | 确认与改判 ·「采纳这条归因」 | 点击 | `confirmed` 置真 ⇒ 「确认归因并回写」转可用(**前置开关**) | 归因为空时禁用 | +| P7-05 | 确认与改判 ·「驳回」 | 点击 | 标为已驳回;回写按钮保持禁用 | 归因为空时禁用 | +| P7-06 | 确认与改判 ·「改后再用」 | 点击 | 标为改后再用;回写按钮保持禁用 | 归因为空时禁用 | +| P7-07 | 回写目标提示 ·「确认归因并回写」 | 点击 | 回写到当前账号画像:记忆 +1;显示回写目标(流转 17) | **未采纳归因(`confirmed` 为假)或未选账号时禁用** | +| P7-08 | 历史复盘 · 展开/收起 | 点击 | 展开历史复盘结论 | 从不可点 | +| P8-01 | 发布记录行 | 点击 | 右区换成该条的对账详情 | 从不可点 | +| P8-02 | 单条溯源 · 展开/收起 | 点击 | 展开溯源:从记录回到内容与版本 | 从不可点 | +| P8-03 | 对账核对区 ·「核销」 | 点击 | 二次确认 → 该条标「已核销」 | 未选记录时禁用;记录未「已发布」时禁用 | +| P8-04 | 商单与收支 · 展开/收起 | 点击 | 展开收支条目(F12 标 `P2/Deferred`) | 从不可点 | +| CHECKOUT-OK | 核销二次确认 ·「确认核销」 | 点击 | 该条标「已核销」;提示成功;浮层关 | 从不可点 | +| CHECKOUT-CANCEL | 核销二次确认 ·「取消」 | 点击 | 关闭浮层,不核销;焦点回触发按钮 | 从不可点 | + +⚠️ **「可见关闭出口」与「决策型关闭」是两件事**:每个浮层的中性关闭出口只有一颗 ×(`X-close`),恰好 1 个;「取消」这类带决策语义的按钮也能关层,但它不是「找出口」用的,**单独登记**(`R-03` / `P5-10` / `CHECKOUT-CANCEL`)。⛔ 不把两类混成一个数。 + +**表外可点元素必须为 0** —— 自检里有一条逐集合做双向差集的检查(`#/selftest` 自动跑)。 + +⚠️ **`A-01` 不是控件**:它是假设浮层里的只读展示行,列出来是为了「假设有两处、逐条给复核人/时机/落点」这件事在清单里看得见 ⇒ **不进实现清单**(原型里的 `IMPL` 表),自检也不拿它去点。 + +⚠️ **V1 撤销的 7 个 ID 与 V2 再撤 5 个**:V1 撤 `G-01…G-04`(一级组)/`G-07`(账号切换器)/`G-09`(演示开关)/`G-11`(收起侧栏)。V2 因「功能入口」那一层整体撤销,再撤 `card()` 相关的 `data-page` 用法;因「全局检索」从浮层改为 P1 的业务板块,撤掉检索浮层与其 `S-01`/`S-02`(改由 `P1-06`/`P1-07` 承担)。⛔ 撤销一个 ID 时必须同时把它的 DOM 删掉,否则判据「页面上每个 `data-act` 都在清单里」会报红。 + +### 2.5 组件规格(来源:选定套既有组件族) + +| 组件 | 规格(具体值) | 来源 | +|---|---|---| +| 按钮 · 主档 | 高 `40px`,内衬 `12/20`,字号 `16px`,字重 `600`,圆角 `26px`,底 `--accent`,字 `--on-accent` | 选定套 `--btn-*`;字号 16 + 600 是**必须的**(`#FFFFFF` 压 `#9e4cff` 只有 4.26:1,须走大字线 3:1) | +| 按钮 · 次档 | 高 `40px`,内衬 `12/20`,字号 `14px`,字重 `500`,圆角 `26px`,底 `--surface`,描边 1px `--line`,字 `--ink` | 同族 | +| 按钮 · 弱档(文字) | 高 `32px`,内衬 `6/12`,字号 `14px`,圆角 `26px`,无底无描边,字 `--accent-text` | 同族 | +| 卡片 · 密卡 | 内衬 `16px`,圆角 `16px`,底 `--surface`,L1 阴影 | 同族 | +| 卡片 · 宽松卡 | 内衬 `24px`,圆角 `24px`,底 `--surface`,L2 阴影 | 同族 | +| 输入框 | 高 `36px`,内衬 `12/10`,圆角 `9px`,字号 `14px`,底 `--surface`,描边 1px `--line` | 同族 | +| 徽章 / 状态标 | 高 `22px`,内衬 `2/8`,字号 `12px`,圆角 `999px`,无描边,底为对应状态色 8% 叠加 | 同族 | +| 侧栏(`.sidebar`) | **拉长圆角浮栏**:宽 `184px`、内衬 `8px`、圆角 `24px`、底色 `color-mix(in srgb, var(--ink) 5%, transparent)`、描边 `1px color-mix(in srgb, var(--ink) 12%, transparent)`;高度随内容、`align-self:center` 在 `184px` 列里垂直居中 | 形态沿用选定套 `.app-sidebar`(圆角浮栏、淡底、淡描边),宽度按「要容下组名」的判断放到 `184px`(几何不在样式库内,见 §1.1 ⑤) | +| 侧栏组标(`.nav-group-label`) | 字号 `12px`、字重 `600`、色 `--ink-faint`、左内衬 `12px`、上边距 `12px`、下边距 `4px`;`≤640` 转成横滚条里的段标 | 新增:承载 `2b` §三 的三个组名 | +| 侧栏导航项(`.nav-item`) | 高 `40px`、内衬 `0/12`、圆角 `999px`、图标 `20px` + 名字 `14px/500`、段间距 `8px`;项间 `gap 2px`;hover 只换底色(`--tfast`),⛔ 不移位、⛔ 不加阴影 | 形态照选定套 `nav-item`(药丸、图标在上、只换色);因栏加宽,项改成横排图标+名字,字号升到 `14px` 与全站正文同档 | +| 侧栏当前项(`.nav-item.is-active`) | 整块浅紫底 `color-mix(in srgb, var(--accent) 10%, var(--paper))` + 字色 `--accent-text` + 字重 `600`(⛔ 不用单侧色条、⛔ 不用描边变黑) | 与 §1.1 ⑩ 第 6 条「选中态只有一套画法」一致 | +| 跨组入口(`.nav-cross`) | 与三组之间一条 `border-top: 1px solid var(--line-soft)` 分隔;组标写作「账号画像 · 跨组」 | 落 `2b` §三「账号画像不属于三个业务组之一」 | +| 页面公共框架(`.page-shell` / `.page-shell-title` / `.page-shell-stats` / `.page-shell-ops` / `.page-shell-aux`) | 标题区:`h1` + 一行说明;统计区用 `.stat-item`(白底 + 1px `--line` + 圆角 `16px` + 内衬 `12/16`,值 `20px/600` + `tabular-nums`,标签 `12px` `--ink-mute`);操作区一行按钮靠右;辅助入口区最多一个入口。⛔ 这一层**不带 `.block` / 不带 `.block-head h2`** | 落 `2b` §四:它不算板块数、不参与功能归属、不占冻结计数 | +| 满宽表格(`.ds-table.tbl-dense`) | 容器 `.panel` + `.table-wrap`(`overflow-x:auto`);表头 `12px/600` `--ink-mute` + 下边框 1px `--line`;行内衬 `4/8`、行间 `border-top` 发丝线、单元格 `vertical-align:middle` + `nowrap` | 密度契约(一屏 ≥6 行)逼出来的紧凑档 | +| 栏内表(`.ds-table.tbl-side`) | 两栏**栏内**的列表:内衬同上,但 ⛔ **不套 `nowrap`** | 同上,只在窄栏里用 | +| 行级微按钮(`.btn-micro`) | 高 `22px`、内衬 `0/8`、字号 `12px`、圆角 `999px`、无底、字色 `--accent-text`、`:disabled` 时透明度 `.45`。⛔ 表格行里不许用 32px 的 `.btn-sm` | 同上 | +| 分段控件(`.seg` / `.seg-item`) | 容器 `gap 4px` + 可换行;项高 `32px`、内衬 `0/12`、圆角 `999px`、描边 1px `--line`、白底;选中项 `.is-on` =整块浅紫底 + `--accent-text` + 600 + 描边转 `--accent` | 选中态统一 | +| 表单字段(`.field`) | 字段块间距由 `.field + .field{ margin-top:16px }` 出 | 统一 | +| 表格当前行(`.cell-name.is-on`) | 当前行的行名转 `--accent-text`(选中态在表格里的落法,⛔ 不写内联 `color`) | 统一 | +| 两栏分栏(`.grid-main-side`) | 宽比 `1.35fr : .9fr`;左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列 | 沿用 | +| 图标(唯一出口 `navSvg(page,size)`) | `viewBox 24` / `fill:none` / `stroke:currentColor` / `stroke-width:2` / 圆头圆角;尺寸只有两个用法:侧栏 `20px`、`≤640px` 的 `16px`;颜色只有一处 `--accent-text`(当前项走 `currentColor`) | 沿用 | + +> 同屏主档按钮 ≤1(多步流程每步 ≤1):P1 无主档、P2/P3/P4/P5/P6/P7/P8 各 1 个 ✅ +> 实底底色 ≥2 种:主档 `--accent`、次档 `--surface`、状态标(ok/err/warn 三色 8% 叠加)✅ + +--- + +## 三、两处假设的显式标注(⛔ 不当已确认需求用) + +②段 `2b` §七 标了两处骨架受限(第 1 条 P1 形态 / 第 2 条 P8 第 4 板块)。本轮**尚无用户结论** ⇒ 按②段给的默认读法做,并在本份与原型里显式标注: + +| # | 受影响处 | 假设内容 | 本轮默认读法 | 复核人 | 复核时机 | 结论落点 | +|---|---|---|---|---|---|---| +| 假设 1 | **P1 的形态** | 矩阵级视图是否真需要(1a 待复核第 5 条 + A1) | **按「需要矩阵级视图」做**:P1 = 矩阵总览,5 个板块全在。若复核为「不需要」,P1 降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换 | 主会话转用户 | ②段收口时一次性过 | `2b` §七 + §五 P1;本轮落 `ui/DESIGN.md` 本节 + 原型 P1 页头的「假设」徽章 | +| 假设 2 | **P8 第 4 板块**「商单与收支」 | 商单对账进不进第一版、收支口径是否内容级(1a 待复核第 6 条 + A3) | **按「进第一版但属 P2、可整块缺」做**:第 4 板块**渲染出来但标「可点入 + 假设」**,展开后给一句「本块依赖未复核项」。第 1、2、3 板块不受影响 | 主会话转用户 | 同上 | `2b` §七 + §五 P8;本轮落 `ui/DESIGN.md` 本节 + 原型 P8 第 4 板块标题行的「假设」徽章 | + +**原型的兑现方式**:两处各在自己的**板块标题同行右侧**挂一个「假设」徽章,**徽章本身可点**(`G-08`)—— 点开后逐条给出复核人 / 时机 / 落点。⛔ 假设既没有被当已确认需求写死,也没有被编出答案。 + +--- + +## 四、Gate-1 方向门自检(硬闸,结果写在本份末尾) + +逐条结论在 §八(十七行,含本轮现取的实测依据);逐视口表在 §6.1。 + +--- + +## 五、缺口与证据边界(⛔ 不假装支持) + +1. **反 AI 味 / 无障碍 / 表单校验 / 动效纪律的逐项数值判据本次无供给来源** —— 这四项出自 §供给·工艺数值判据的**可选档**(`assets/open-design/craft/` 13 份),本轮未动用可选档 ⇒ ⛔ 不凭感觉编一套顶上。本段实际应用的是**默认档**判据:`execution-runbook.md` §3.3/§3.4 + `layouts-tooling.md` §5.5。 +2. **暗色主题本轮不做** —— 选定套的暗色与亮色是两套独立基线,规则是「要暗色就整套切」。⇒ 本轮只做亮色基线,⛔ 不与暗色混搭。 +3. **`--warn` 是本项目追加的第 14 个语义色** —— 选定套亮色基线只有 ok/err,无 warn;而②段 P5 要求软硬两种区分。追加值的对比度实测记在 §六。 +4. **`1c-用户画像.md` 是零访谈画像** —— 界面里凡涉及「角色能看什么」的判据都基于它,**不得对外说成基于用户调研**。 +5. **3c GPT 参考版本轮不做** —— 派活单明令「⛔ 不许再向外发送本项目内容」(第②棒曾把产品现状发到站外,属红线动作)⇒ 本轮**全部输入只看本地文件**,⛔ 不上传、不外发、不用站外模型服务。⇒ `3c` 的「让外部模型独立出一版」这一步本轮**按红线停做**,并在收尾明示「未取得参考版 ≠ 已通过」。这是**红线优先于流程**的处置,不是漏做。 +6. **窄视口实测下限与红档** —— 本轮取证走 CDP 声明式视口(`Emulation.setDeviceMetricsOverride`),实测到 `390×844`;逐视口表(§6.1)现含 `390×844` 一档,⛔ 不写「已测 375」这种没测过的。⚠️ **16 档里有 3 档不达标**:`560×900`(P1 5 行)、`500×844`(P1 3 行)、`390×844`(P1 0 行 + P2 5 行)。成因是 V2 自己把侧栏由 `64px` 加宽到 `184px` + 新增 Page Shell 一层(抬高 P1 首行顶),⛔ **不是本轮复核棒造成的**(本棒未动几何)。是否动窄屏断点,待用户裁定。 +7. **规格核对只走本地已测值** —— §六 的实测值全部由 `#/selftest` 与 `_tools/` 现算,⛔ 不目测。上一版留档的两处遗留(`500×844` 一屏 −1 行、满宽表格与一屏 ≥6 行不可兼得)本轮**重测后如实登记**,⛔ 不靠改判据过关。 +8. **②段自身有一处内部不一致,本版按「板块清单」实现并登记** —— `2b` §五 P2 的板块清单把「灵感速记」列为第 5 块,而同页信息分档表把「灵感速记」标为「全局可达(框架层,不占板块)」。两者冲突。本版按**板块清单**(也是 §九 第 16 条 39 块加总的依据)实现 —— P2 按 5 块,灵感速记**算业务板块**;⛔ 没有静默择一,在此登记待②段收口时订正。 + +--- + +## 六、数值取证登记(自检 + 工具实测回填,⛔ 非目测) + +> 本表由 3b 阶段现算回填,数据源:`#/selftest`(DOM 取值 + 真实像素)+ `_tools/` 八个脚本。⛔ 一个数都不许拍脑袋。 +> **Gate-1 方向门的逐条结论 + 实测依据在 §八**(全文结尾,⛔ 不在这里再抄一遍)。 +> 此处只放一条 `DESIGN.md` 独有的登记:**逐视口表**(自检全文、20 条变异、三条反向变异、四条改动明细见 `ui/3b-实测记录.md`;两处冲突以 `3b-实测记录.md` 为准)。 + +### 6.1 逐视口表(16 档;契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1,⛔ 不分档) + +`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 9223 已有实例)。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 1280×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 1024×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 1000×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 960×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 920×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 901×900 | 77/0 | 669px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 900×900 | 77/0 | 661px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 840×900 | 77/0 | 661px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 820×900 | 77/0 | 661px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 768×900 | 77/0 | 676px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 700×900 | 77/0 | 676px | 31px | 7 | 12 | 49px | 184×550 | ✅ | +| 640×900 | 77/0 | 714px | 31px | 6 | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | 76/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | 76/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | 75/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档**(`run_viewports.py`:`逐视口:不达标 3 / 共 16`)。行距在所有档恒为 31px、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(669 → 822px)。 + +> ⚠️ **与 V1 对照(归属清楚)**:V1 第八轮修完后只有 `500×844` 一处红。V2 是 **560×900 转红 + 390×844 新增一档且两条判据报红**。成因是 V2 自己的两处设计选择 —— 侧栏 `64px → 184px`(主区变窄)、新增 Page Shell 一层(抬高 P1 首行顶)。**本轮复核棒一格几何未动**,只把真值测出来。是否为此动 V2 的窄屏断点,留给用户裁定(见 `3b-实测记录.md` §八)。 +> +> ⚠️ **`390×844` 能测 ≠ 达标**:它是契约要求留档的第二个视口,帧已出(PNG 尺寸当场比对通过),但 P1 装下 0 行、P2 只有 5 行。 + +--- + +## 七、修订记录 + +| 轮次 | 改了什么 | 为什么 | +|---|---|---| +| V2 初版(2026-10-09) | ①**导航**由「一层八项平铺」改回「3 个业务组 + 1 个跨组入口」,侧栏由 `64px` 药丸浮栏加宽到 `184px` 带组标圆角浮栏;②**新增页面公共框架(Page Shell)**一层(标题区/数据摘要区/页面操作区/辅助入口区),并写明三条硬规则(不计板块数、不参与功能归属、不占冻结计数);③**撤销「功能入口」那一层**(`.sect-nav` / `.data-cards` / `.data-card` 与 `card()` 全部删除);④**骨架按新版 39 块重排**:P4 由 5 → 6、P7 由 5 → 6、P2 第 3 块注明可点入子区;⑤**对象冻结**:每个业务板块带 `data-obj`;⑥P7「确认与改判」落为回写的**前置开关**(`confirmed` 为假时回写禁用);⑦P4 版本管理承担 F7/F8、录制卡片与画板承担 F14;⑧撤销检索浮层(全局检索改为 P1 业务板块) | 按新版 `2a`/`2b` 重做第 4 步。逐条依据:`2b` §三/§四/§一第 2 条+§九第 2 条/§九第 8–15 条/§五(39 块);`2a` §一第 2 条、§三 F7/F8/F14、F10 | +| V2 复核棒(2026-10-09) | ①新增 `3b-实测记录.md`(自检 77 项全文、变异 20/20、三条骨架反向变异、16 档逐视口、四条改动明细);②本份补 §6.1 逐视口表 + §八 Gate-1 加「实测依据」列;③`_tools/` 补齐到 8 个脚本(新增 `tab_close.py`,`cap.py`/`grab_selftest.py` 改单标签复用);④`_gate_shots/` 补到 17 张视口帧 | 第 4 步只差「闸门取证 + 台账上报」。⛔ **未重做界面**:原型仅动 4 处(自检重入死循环守卫 / 「功能入口层残留」判据改八页逐页查 / `hashchange` 守卫回退 + 注释 / `check_skeleton.py` 判据由「互为前缀」收紧为「剥注解后严格相等」),几何与骨架一格未动 | + +--- + +## 八、Gate-1 方向门自检(硬闸) + +> 结论列=本轮复核棒的判定;**实测依据**列=本轮现取的证据(自检项名 / 脚本名 / 变异编号 / 实测像素),⛔ 不是目测。全量证据见 `ui/3b-实测记录.md`。 + +| # | 检查项 | 结论 | 依据 | 实测依据(2026-10-09 复核棒现取) | +|---|---|---|---|---| +| 1 | 设计契约十二字段 | ✅ 过 | §一 | 十二字段全填,无空、无「待定」;重复项逐页列了次级信息 | +| 1b | 页型判定 | ✅ 过 | §一 | 自检「工具型纪律:零 `.eyebrow` / 零 `.lead` / 零 `.hero`」PASS;「`@keyframes` 共 0 处」PASS | +| 2 | 结构骨架(翻译面) | ✅ 过 | §1.1 ⑤ | 骨架档=主区+侧区(给了理由);②段分档表每条信息都有落位(§1.2 逐页核对) | +| 2b | 骨架未漂 | ✅ 过 | §1.2 | `_tools/check_skeleton.py` 正向 PASS:八页 **39 块**与 `2b-界面布局-新版.md` §五 逐页逐位一致;**三条反向变异全部报红**(§四) | +| 3 | 状态覆盖 | ✅ 过 | §1.3 | 六态逐页有结论;自检「六态 × 八页 = 48 个组合全部渲染出内容」PASS;`disabled` 与 `无权限` 分开写 | +| 4 | 令牌表 | ✅ 过 | §2.2/§2.3 | 自检实测对比度:`--warn` 对 surface = 5.93:1、`--accent-text` = 4.76:1、`--ink-faint` = 3.55:1(三条均过契约) | +| 4b | 字阶定值表 | ✅ 过 | §2.3 | 七档各一个 px(12/14/16/18/20/24/30),相邻差 ≥2;自检实测**在用** 5 档:12/14/18/20/24 | +| 4c | 高度层级 | ✅ 过 | §2.3 | L1/L2/L3 每层 ≥2 层叠层;自检「无单层死黑重阴影」PASS | +| 4d | 布局脚手架 | ✅ 过 | §2.3 | 侧栏 `184px` + 主区 `minmax(0,1fr)`;自检实测 1440×900:侧栏 184×550px、顶栏 49px、主区 clientH 851 / scrollH 1435 | +| 5 | 组件规格 | ✅ 过 | §2.5 | 按钮三档+卡片两档+输入框+徽章均为具体值;自检「首屏同屏主档按钮 ≤1 个」PASS | +| 6 | 反 slop | ✅ 过 | §2.2 | 无紫→粉渐变;标题走展示体;强调色填充实测最高 0.52%(契约 ≤5%,在创作台) | +| 7 | 拒绝清单 | ✅ 过 | §1.1 ⑩ | 共 **8** 条,每条带可判定判据(≥3 ✅);其中第 6/7/8 条由自检「组件口径」「Page Shell」「辅助入口区」三条判据 + 变异 M15 看住 | +| 8 | token 引用完整性 | ✅ 过 | §2.1 | 三层结构;组件层只引语义层、语义层只引 primitive;无孤立 token | +| 9 | 分档兑现 | ✅ 过 | §1.2 | 常驻=零点击可见、可点入=一次点击可达;档位未被本段改动 | +| 10 | 供给核对 | ✅ 过 | §〇 | 选定套 `design-system-tiaoyue`,与上一版一致(沿用同一套) | +| 11 | 对象冻结(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「八页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内」PASS;变异 **M17** 报红 | +| 12 | Page Shell 不占板块(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「八页各恰好 1 个,且都不带 `.block` / 不带 `.block-head h2`」PASS;逐页 `.block` 数 = `FROZEN` | + +⇒ **Gate-1 十七行全过。** 唯一未达线的是**密度契约**(窄屏三档:560×900 / 500×844 / 390×844),它属 3b 实测的登记项、⛔ 不属 Gate-1 门 —— 见 §6.1 与 `3b-实测记录.md` §八。 + +--- + +*本份是原型的绑定规范:原型只许引本份登记的 token。* + +## 九、说人话自评(本轮改动的文字部分;判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 9 | 修订记录第一句就说「⛔ 未重做界面、只动 4 处」,不铺垫 | +| 节奏 | 8 | 本份天生是规范体裁(表格为主),改动段落已补叙述,⚠️ 弱项 | +| 信任度 | 10 | 自评里把「本棒的判定 vs 上一棒的设计」分开写;窄屏三档红如实登记 | +| 真实性 | 9 | Gate-1 每行都挂了本轮现取的证据(判据名 / 变异编号 / 实测像素) | +| 精炼度 | 9 | Gate-1 只在本份出现一次,§6.1 只放逐视口表、不重抄结论 | +| **总分** | **45 / 50** | 门槛 ≥45 ⇒ 压线过;扣分点在节奏那一行 | + +> 全量实测与四条改动的现象/根因/证据见 `ui/3b-实测记录.md`(该份自评 46/50)。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__d85687.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__d85687.md new file mode 100644 index 0000000..4a75d0a --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__d85687.md @@ -0,0 +1,467 @@ +# MCN 短视频整合营销工作台 · DESIGN.md + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3a 子步产出 +> 落点:`执行会话/目标-根据1a需求文档生成MCN短视频整合营销-d85687/ui/DESIGN.md`(本目标目录内;⛔ 未写域外 `docs/pm/`) +> 判据源:`product-planning/references/stage-delivery/SKILL.md`(含 §供给 / Gate-1)+ 同目录 `references/execution-runbook.md` §2 + `references/layouts-tooling.md` §5.5 +> 本份是原型的绑定规范:原型只许引本份登记的 token。 + +--- + +## 〇、开工声明(声明制,四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3a 视觉规范(D0 锚需求 → D1 定调 → Gate-1) | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**:视觉与体验的底线判据)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据;只许更严、更具体,⛔ 不许放宽基础层)/ 挡位 **标准** | +| 依据文件 | `stage-delivery/SKILL.md` §供给 + §3a;`references/execution-runbook.md` §2.0–§2.4;`references/layouts-tooling.md` §0/§1/§5/§5.5 | +| 产出落点 | `ui/DESIGN.md`(本份)、`ui/mcn-workbench.html`(3b) | + +### 供给核对(runbook §2.0 · 步 −1,每轮必做) + +| 步 | 动作 | 结果 | +|---|---|---| +| −1 | 确认 §供给 三处在位:定调与令牌(自带样式库)、版式骨架(`references/layouts-tooling.md`)、工艺数值判据(`references/execution-runbook.md` §3.4 + `layouts-tooling.md` §5.5) | ✅ 三处都在位。自带样式库现存 **1 套**:`assets/design-systems/design-system-tiaoyue/` | +| −1b | 套名与本项目记录比对 | ✅ 本目标无前次记录(③段首次开工,本目录此前只有 `research/` 与 `prd/`)⇒ 视作首次选定,不触发变更清单 | +| −1c | 可选档是否动用 | ⛔ **未动用** `assets/open-design/`(随段携带的可选件)。因此它独有的那几项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)**本次无供给来源** —— 见 §五 已明示,⛔ 没有凭感觉编一套顶上 | + +### 页型判定(硬前置,SKILL.md §3b) + +**本产品全部 8 页都是工具型页面,不是营销页。** 依据:用户是天天来干活的 MCN 团队,每一页都有人在里面完成一件事(决定先处理哪件 / 挑一条选题 / 存一条拆解 / 推一个环节 / 确认一次发布 / 改一份画像 / 写一条归因 / 核销一条记录);没有一页是为了让人「看一眼就下决心」。此判定与②段 `2b-界面布局.md` §一 一致。 + +⇒ 本份 D0 里**零 `.eyebrow`、零 `.lead`、零 `.hero`**(token 与类名都不设这三个)。 + +--- + +## 一、设计契约(十二个字段) + +### 1.1 项目级字段 + +**① 主用户**:MCN 机构的内容负责人(矩阵级决策)、编导与文案(选题与创作)、剪辑与投放(版本与发布)。三者同处一个矩阵,职责不同、看的页不同。依据 ①段 `1c-用户画像.md`(零访谈画像,骨架来自 1a §四 三行角色描述 —— 该局限已如实登记,见 §四 缺口)。 + +**② 主操作**:**逐页唯一**(全页级)。六页的主操作由②段给定,逐页列在 1.2;本段未改一个。 + +**③ 必要内容(核对面)**:逐页核对②段分档表,见 1.2。核对面只做**落位核对**(常驻的零点击可见、可点入的一次点击可达),⛔ 本段不以它为由增删②段已定的信息档位。 + +**④ 重复项的信息量**:本产品的四个主列表(账号矩阵 / 对标内容 / 资产条目 / 发布记录)都是**满宽表格**(表头一排 + 每行一个短值),每行除「主标识 + 动作」外都带次级信息,逐页列在 1.2。 + +**⑤ 结构骨架(翻译面)**: + +- **骨架档:主区 + 侧区**(选它的理由:一级导航有八个并列目的地、宽屏 ≥1024;tiaoyue 的实测外壳本身就是「左侧栏 `app-sidebar` + 顶栏 `layout-header`」的应用型外壳,两者同构)。 +- **导航层级:只有一层 —— 八个功能项**(2026-10-08 用户两次定案:先「左侧功能导航 只有大板块的导航 只有一层」,再「看看 gpt 的板块或功能命名,再看看你的」)。侧栏一列八项、一项一页,⛔ 没有第二层:总览 / 找选题 / 资产库 / 创作 / 发布 / 账号画像 / 复盘 / 记录与对账(两三个字的短名;页头与面包屑仍写②段的页面全名,两个名字各司其职)。 +- **侧栏形态:照 tiaoyue 的 `app-sidebar` 做 64px 药丸浮栏**(2026-10-08 用户定案「左侧导航参考 tiaoyue 的导航」;第七轮回源站 `https://www.tiaoyue.com/` 逐值量过,实测表在 `3d` §十三)。实测真值:栏 **64px 宽 + 内衬 3px + 圆角 100px**(药丸)+ 淡色底 + 1px 淡描边,⛔ **没有右边线**(分界靠药丸自己的底与描边);项是 **56×78 的药丸**(圆角 54px、内衬 16px、段间距 6px),**图标 24px 在上、名字 12px/500 在下,两者都常驻**;当前项=中性填充 + 满墨字。⚠️ 这跟上一版「纯图标栏、名字只走悬停提示」的口径**是反的** —— 那是照组件清单猜的(清单里没有文字标签族),回源站一看名字是一贯显示的。名字**一律 2 个字**:项宽 56 − 内衬 16×2 = **24px 内容宽**,只放得下 2 个 12px 汉字,这是参照物定的长度上限。悬停提示是 viewport 级浮层(`nav-tips-layer`),内容=**这一页是干什么的一句话说明**(⛔ 不重播名字,名字已经常驻)。**≤640 的窄屏** ⇒ 药丸整段让位给**一条带名字的横滚标签条**(见 §1.1 ⑨)。 +- **主页面的收口形态(八页统一,2026-10-08 用户定案「每个板块的首页 样式参考 MCN工作台首页」)**:每一页都=【页头 → **该页统计条**(`.home-stats`+`.stat-item`,3–4 个数)→ **功能入口卡一行**(`.sect-nav`,指向②段 §三 从本页出发的流转目标;**⛔ 不带「功能入口」小标** —— 参照物也没有,且小标占的 24.6px 要还给密度契约,见 §五 第 7 条)→ **满宽表格组成的主数据块** → **一处左右两栏** `.grid-main-side` → 尾块(P1 还多一块「全局检索与随手记」)】。⛔ 统计条与功能入口卡都不是 `.block`(无 `.block-head`),**不进②段骨架的板块计数**;八页主数据块已逐页由行式列表改成满宽表格(编辑型板块——环节工作区、画像六维、版本逐版编辑、对账核对区——保持原形态,因为它们的任务不是「扫一行行」)。 +- **板块落位**:把②段每页的板块按它给的「从上到下」顺序放进主区,每块一个文字标题。⛔ 未新增 / 移动 / 删除 / 合并任何板块(逐页对照见 §三)。 +- **密度目标:密集(8–32)**。理由:8 页全是一屏要放多行记录的工具型页面,②段 P1 的信息分档要求矩阵列表与今日待办**同时**常驻,宽松档放不下。**同一页面只取这一档**。 +- 块间距 ≥ 块内间距的 2 倍:块间 32px、块内 8/12/16px ⇒ 比值 2.0–4.0 ✅(数值登记在 §二)。 + +**⑥ 交互清单**:见 §二 表 2.4(逐元素四列)。**它是唯一的交互真相源** —— 3b 实测、3c 会诊、3d 终检都引这一张,⛔ 不另建一份。 + +**⑦ 状态覆盖六项**:见 1.3,逐页逐项有结论。 + +**⑧ 组件来源**:优先沿用选定套的既有组件族,其次才是自创。⛔ 未参考 `teamOnly: true` 的族(`onboarding-divider` / `onboarding-feature` / `team-scope-content` / `team-onboarding-card`)。清单见 §二 表 2.5。 + +**⑨ 响应式行为**: + +| 断点 | 布局怎么变 | +|---|---| +| `>1024` | 侧栏 **64px 药丸浮栏**常驻(照 tiaoyue `app-sidebar` 的 `w-16`,⛔ 宽度不随断点变)+ 主区 `minmax(0,1fr)`;列表列宽按 1:1 分配 | +| `1001–1024` | 侧栏仍 64px;两栏分栏与满宽表格**都保持不变**;另:`.grid-cards` 落两列、顶栏间距收到 `8px`。**顶栏不随断点折行**(只剩「产品名 + 随手记」) | +| `901–1000` | 同上,另:功能入口卡**只留标题**(隐描述)、**卡最小宽 200 → 160px**(这一条 2026-10-08 第八轮加的;不加的话 768 会让三张卡折成两行) | +| `821–900` | 上述两项继续;另:两栏分栏 `.grid-main-side` → 单列(右栏被挤到 300px 以下就会折行) | +| `641–820` | 上述三项继续;另:**统计条最小宽 132 → 96px**(4 格不折行 —— 700px 下 132px 会让 4 格折成两行、统计条高度翻倍)。这一条也是第八轮加的 | +| `≤640` | 侧栏**变成页头下方一条可横向滚动的标签条**(⛔ 不隐藏)。这一档把药丸浮栏那一整套(圆角 100px/描边/淡底/垂直居中/项 56×78)**整段还原成通栏横条**:项横排、高 `36px`、内衬 `0/12`、圆角 `999px`、图标 `16px` + 短名,当前项滚进视野;主区单列 | + +**滚动容器(2026-10-08 修,见 §五 第 10 条)**:整页不滚、**只有主区 `.view` 滚**。高度链必须写成 `.app{height:100vh}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}` —— 只写 `min-height` 会让 `.app` 跟着内容长高、滚动落到 `<body>`,而 body 是 `overflow:hidden`,折叠线以下的内容就永远拿不到(原型真踩过)。 + +⚠️ 实测覆盖:**1440 / 1280 / 1024 / 1000 / 960 / 920 / 901 / 900 / 840 / 820 / 768 / 641 / 640 ×900,以及 500×844** 逐个跑过自检,横向溢出全为 0;纵向由判据「滚动只由主区承担」逐个核过。窄视口实测到 500×844 为止(原因见 §五 第 6 条)。**密度契约(一屏 ≥6 行)的收线随侧栏收窄一起下移:≥768px 全绿**(侧栏从 240px 收到 64px,主区宽了 176px,表格不再折行);**≤640px 时 P1 掉到 5 行/−1 行(不达标)**。逐视口实测值与成因见 §五 第 7 条。 + +**⑩ 明确拒绝的模式**(≥3 条,每条可判定): + +1、⛔ 不出现「眉标 / 大标题 / 灰色副标题」三段式标题区(判据:DOM 里 `.eyebrow` / `.lead` / `.hero` 三个类名出现次数为 0)。 +2、⛔ 不用围合边框假装分组(判据:非控件元素里 `border` + `border-radius` 同时出现的次数,在同一「分组」用途上 ≥3 次即判不过;结构性容器一律靠底色差 + 多层阴影分层)。 +3、⛔ 不给列表行套框、不给状态上整行底色(判据:行间只用 `border-top`;状态只出现在 `tag` 内)。 +4、⛔ 不做**逐区块**入场编排(判据:`@keyframes` 至多 1 处 —— 只许一次协调出场;过渡只用 `transition`,⛔ 不用 `linear`/`ease`)。 +5、⛔ 不可点的东西不长成可点样子(判据:页面里所有 `button` / `[role=button]` / `.btn*` 集合,与 §二 表 2.4 的元素列做双向差集,差集为空)。 +6、⛔ **不用内联样式表达「选中态」或覆盖「字号」**(判据:八页里 `[style*=border-color]`、`[style*=color]`、`[style*=font-size]` 的出现次数**都为 0**)。**选中态全站只有一套画法**:`.is-on` / `.is-active`(整块浅紫底 + `--accent-text` + 字重 600,⛔ 不用单侧色条、⛔ 不用「描边变黑」);**字号只许走 `--fs-*` 档**(七档定值,见 §2.3)。⚠️ 只查这三样、不查全部内联样式 —— `margin-*` / `flex` / `justify-content` 这类一次性布局微调允许内联,硬按「内联为 0」判会把正常布局一起判红。 + +**⑪ 验收标准(可观察可判定)**: + +- 八页各自可达(`#/p/p1`…`#/p/p8` 直接打开都渲染出该页内容,不是空壳)。 +- 表 2.4 每一行的「触发 → 反馈」都真发生过,无死按钮。 +- 六态在每一页都能被看到(正常 / 加载 / 空 / 错误 / 禁用 / 无权限)。 +- 宽视口 1440×900 与窄视口各留一张截图,横向溢出为 0。⚠️ 窄视口**实测到 500×844 为止**:本机只有无头 Chrome + 命令行开关这一条通道,窗口宽下限被卡在 516px,拿不到 390 —— 见 §五 第 6 条,⛔ 不写成「已测 390×844」。 +- 页面上每个可点元素都能在表 2.4 里查到;表里没有的可点元素为 0。 + +**⑫ 明确拒绝的「编造」**(本项目追加一条,源自①②段的纪律):界面上不出现「示例」「示意图」「未接入」「待核实」这类制作说明;也不把机器结论说成人已认可(如把「疑似原因」写成「已确认原因」)。 + +### 1.2 逐页字段(页面职责 / 主操作 / 必要内容落位 / 重复项信息量) + +| 页 | 页面职责(让谁 / 多久 / 完成什么) | 主操作(唯一) | 必要内容的落位核对 | 重复项的信息量(每行的次级信息) | +|---|---|---|---|---| +| P1 矩阵总览 | 让内容负责人在 1 分钟内决定**今天先处理哪一件事** | 挑一件待办并进到那一件事 | 账号矩阵列表与今日待办=零点击可见;异常值、本月最好、检索与随手记=一次点击可达 | 账号行=账号名(主标识)+ 今日该发/已发/效果(3 条次级)+ 异常徽章 | +| P2 选题雷达 | 让编导在 3 分钟内**找到一条能做的选题** | 把一条选题推进下一步 | 监控概览四数、对标内容列表、选题库=零点击可见;评论区洞察、灵感速记=一次点击可达 | 对标行=标题(主标识)+ 账号 + 倍数 + 时间;选题行=选题(主标识)+ 来源 + 状态 | +| P3 资产库 | 让编导在 2 分钟内**存一条拆解结果、或引用一条已存的** | 入库一条 / 引用一条 | 分区切换、条目列表=零点击可见;单条详情、引用入口=一次点击可达 | 条目行=条目摘要(主标识)+ 出处 + 草稿/已入库 + 采集时间 | +| P4 创作台 | 让编导在一条内容上**把当前环节推到下一环节** | 推进到下一环节 | 环节进度、当前环节工作区、当前内容标识=零点击可见;资产引用区、版本列表=一次点击可达 | 版本行=vN(主标识)+ 语义名 + 时间 + 当前标记 | +| P5 发布中心 | 让投放**确认发出这一批版本** | 确认发布 | 检查结果、各版本预览与逐版编辑、确认发布=零点击可见;目标选择、发布记录入口=一次点击可达 | 版本行=账号/平台(主标识)+ 字数 + 检查结论;记录行同 P8 | +| P6 账号画像 | 让内容负责人**改好并保存一个账号的画像** | 保存这一份画像 | 画像六维、账号列表=零点击可见;记忆条目、关联内容=一次点击可达 | 账号行=账号名(主标识)+ 平台 + 内容数;记忆行=日期(主标识)+ 来源 + 一句话 | +| P7 复盘台 | 让内容负责人**确认归因并写回这个账号** | 确认归因并回写 | 表现数据、归因结论区、待复盘列表、回写目标提示=零点击可见;历史复盘=一次点击可达 | 待复盘行=内容(主标识)+ 发布账号 + 发布日 + 数据到没到 | +| P8 记录与对账 | 让投放**核销一条发布记录** | 核销一条记录 | 发布记录列表、对账核对区=零点击可见;单条溯源、商单与收支=一次点击可达 | 记录行=内容(主标识)+ 确认人 + 时间 + 版本 + 状态 | + +### 1.3 状态覆盖六项(逐页给结论) + +判据源:`SKILL.md` 铁律 2 给出的六态清单(loading / empty / error / success / disabled / 无权限)。⚠️ 逐项**数值判据**出自供给可选档的 `craft/state-coverage.md`,本轮未动用可选档 ⇒ **该项本次无供给来源**,故此处只给「有没有、长什么样」的结论,不编阈值。 + +| 页 | loading | empty | error | success | disabled | 无权限 | +|---|---|---|---|---|---|---| +| P1 | ✅ 矩阵数据加载中(骨架行 + 「正在取矩阵数据」) | ✅ 还没接入账号(给「去账号画像建第一个账号」) | ✅ 数据源不可用(显时间戳 + 重试) | ✅ 默认态 | ✅ 无可处理项时待办区禁用并说明 | ✅ 非管理员看利润字段时的遮罩说明 | +| P2 | ✅ 拉取对标中 | ✅ 监控名单为空(给「录一个对标号」) | ✅ 拉取失败(退路=手工录入) | ✅ 默认态 | ✅ 未选账号时「转入创作」禁用 | ✅ —(不适用:本页对所有角色开放) | +| P3 | ✅ 条目加载中 | ✅ 该分区还没有条目(给「去拆解一条」) | ✅ 读取失败(重试) | ✅ 默认态 | ✅ 无出处的条目「入库」禁用(门禁) | ✅ —(不适用) | +| P4 | ✅ 环节生成中 | ✅ 该环节还没产出(给「开始这一步」) | ✅ 本步失败(保留已产出 + 重试该步) | ✅ 默认态 | ✅ 文案与封面缺一,「进检查态」禁用(封面缺只提示) | ✅ —(不适用) | +| P5 | ✅ 检查中 | ✅ 还没有可发布的版本(回 P4) | ✅ 检查自身失败 ⇒ **按不过处理**(fail-closed) | ✅ 无硬拦、可发 | ✅ 有硬拦项时「确认发布」禁用 | ✅ 未授权账号的版本标「无发布权限」并禁用该版 | +| P6 | ✅ 画像加载中 | ✅ 还没有画像(给「建画像」) | ✅ 保存失败(保留编辑内容) | ✅ 保存成功提示 | ✅ 只读角色时字段禁用 | ✅ 非本人负责账号:可看不可改 | +| P7 | ✅ 读数据中 | ✅ 还没有可复盘的内容 | ✅ 数据读不到 ⇒ 转手工录入表现 | ✅ 回写成功提示 | ✅ 未确认归因时「回写」禁用 | ✅ —(不适用) | +| P8 | ✅ 记录加载中 | ✅ 还没有发布记录 | ✅ 读取失败(重试) | ✅ 核销成功 | ✅ 未选中记录时「核销」禁用 | ✅ 利润列对非管理员隐藏(列级遮罩) | + +> 口径:`disabled` 与 `无权限` 是两件事 —— 前者是「当前条件不满足」(自己能解开),后者是「角色不允许」(自己解不开)。界面文案必须分开写,⛔ 不拿「不可用」一句话糊过去。 + +--- + +## 二、令牌表 + +### 2.1 三层结构(`primitive → semantic → component`) + +组件层只引语义层,语义层只引 primitive;⛔ 无孤立 token。 + +| 层 | 前缀 | 例子 | 规则 | +|---|---|---|---| +| primitive | `--t-*`/`--raw-*` | `--t-accent`、`--raw-fs-12` | 只有原始值,⛔ 别的层不许直接引它以外的东西;本层不许被组件层直接引用 | +| semantic | `--`(无前缀语义名) | `--surface`、`--ink`、`--fs-14` | 只引 primitive | +| component | `--c-*` | `--c-card-radius`、`--c-btn-h` | 只引 semantic | + +### 2.2 色值(来源=选定套 `design-system-tiaoyue` 的 `assets/tokens.css` 亮色基线 · 9 页 clipper 实测) + +| 语义 token | 值 | 用途 | +|---|---|---| +| `--paper` | `#faf9f5` | 页面底(暖白纸感) | +| `--surface` | `#ffffff` | 面板 / 卡片底 | +| `--surface-soft` | `#f7f6f1` | 次级面(表头、只读块、侧栏选中底) | +| `--ink` | `#1a1a18` | 主文字 | +| `--ink-mute` | `#57564f` | 次级文字 | +| `--ink-faint` | `#8a887f` | 三级文字 / 占位(⛔ 只用于非正文:占位、图标、禁用态) | +| `--line` | `#e7e5dc` | 分隔线(行间 `border-top`) | +| `--line-soft` | `#efeee7` | 更弱的分隔(块内) | +| `--accent` | `#9E4CFF` | 主强调色(品牌紫) | +| `--accent-text` | `#963dff` | accent 当**文字**时用这一档(`#9E4CFF` 直接当文字不达标) | +| `--on-accent` | `#FFFFFF` | 主色上的文字 | +| `--ok` | `#3d7a4f` | 成功态 | +| `--err` | `#b4453a` | 错误态 | +| `--warn` | `#8a5a00` | 提醒 / 异常值 / 软劝 ⚠️ **本项目追加**:选定套亮色基线**没有 warn 档**,而②段 P5 要求「硬的拦住、软的只提醒」必须有两种可见区分 ⇒ 新增一档并在次行登记来源与对比度实测 | + +**强调色允许位置(反 slop 要求写明)**:只允许出现在 ① 主按钮的填充底;② 侧栏当前项的**整块浅底**(`color-mix(in srgb, var(--accent) 10%, var(--paper))`,⛔ 不用单侧色条/左侧指示条);③ 链接文字(用 `--accent-text`);④ 焦点环。⛔ 不允许出现在:页面大背景、卡片底、图标填充(除主按钮内图标)、任何渐变。全屏面积 ≤5%。 + +**禁止**:⛔ 无紫→粉渐变;⛔ 无装饰性发光;⛔ 状态色只用这红/绿/黄三系,不做装饰。 + +### 2.3 几何 · 字体 · 间距 · 字阶 · 高度层级 · 脚手架 + +| 项 | 值 | 来源 / 说明 | +|---|---|---| +| 字体 | `"PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans SC", sans-serif` | 选定套实测:源站 `@font-face` 为 0 条,走系统字体栈。⛔ 未手改 | +| 标题字体 | **展示体**:`"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走上面的黑体栈);字重 ≤600 | 2026-10-08 方案 A:选定套源站只给一套系统黑体栈,标题没有自己的性格(基础层 `oil-ui-pro` 把「全页一种无衬线、标题没性格」列为模型默认)。宋体标题 + 黑体正文=「展示 + 正文」两族,符合「字族 ≤2–3」。⛔ 未用 Inter / Roboto / Arial / `system-ui` 关键字 | +| 等宽数字 | `font-variant-numeric: tabular-nums` | 所有数字列,防刷新抖动 | +| 圆角 | 大容器 `24px`(`--t-card-radius`)/面板 `16px`/行与小件 `14px`/输入框 `9px`/按钮 `26px`(药丸) | 全部取自选定套 `<`—— `--card-radius: 24px`、`--ui-radius: 16px`、`--radius: 14px`、`--inp-radius: 9px`、`--btn-radius: 26px` | +| 间距 · 主刻度 | `4 / 8 / 16 / 24 / 32 / 64` | 供布局。块间用 32(同行组间 24),块内用 8/12/16 | +| 间距 · 微网格 | `2 / 4 / 6 / 8 / 12` | **仅供**按钮内衬、徽章内衬、图标间隙 | +| 块间距 / 块内间距 | 32 / 8–16 ⇒ 比值 2.0–4.0 | 判据要求 ≥2 ✅ | +| 字阶定值表(七档,各一个 px) | `--fs-12` 12 / `--fs-14` 14 / `--fs-16` 16 / `--fs-18` 18 / `--fs-20` 20 / `--fs-24` 24 / `--fs-30` 30 | 相邻档差 2/2/2/2/4/6,全部 ≥2 ✅;每档只一个定值,⛔ 不是区间。正文档 `--fs-14`(多数正文)与 `--fs-16`(表单值),落在 14–16 ✅ | +| 高度层级(每层多层叠层) | L1(行/内嵌):`0 1px 1px rgba(26,26,24,.03), 0 2px 6px -2px rgba(26,26,24,.06)`<br>L2(面板):`0 1px 2px rgba(26,26,24,.04), 0 8px 20px -12px rgba(26,26,24,.14), 0 18px 40px -18px rgba(26,26,24,.10)`<br>L3(浮层):`0 2px 4px rgba(26,26,24,.05), 0 14px 32px -12px rgba(26,26,24,.18), 0 32px 64px -24px rgba(26,26,24,.16)` | 每层 ≥2 层叠层 ✅;同层级同值。⛔ 无单层死黑重阴影 | +| 布局脚手架 | 侧栏 **64px 药丸浮栏**(照 tiaoyue `app-sidebar` 的 `w-16`=4rem,⛔ 定值、不随断点收窄;列宽 64px 里放一个随内容高、垂直居中的药丸)+ 主区 `minmax(0,1fr)`;主数据块走**满宽表格**(`.ds-table.tbl-dense`),两栏分栏处用 `1.35fr : .9fr`;窄屏折行交给 ≤640 的横滚标签条 | 骨架档=主区+侧区,已落到具体列宽 | +| 容器与对齐锚点 | 主区左右内衬 32px;表格与块标题左锚点同一条线;数字列右对齐且右锚点对齐块右内衬 | 判据要求「对齐锚点」写明 | +| 浮层 | 居中面板,宽 `min(560px, calc(100vw - 32px))`,内衬 24px;**只有一个可见关闭出口**(右上 ×);遮罩与 `Esc` 也可关,但不计为可见出口 | 满足 Gate-3 的「可见关闭出口唯一」 | + +### 2.4 交互清单(唯一交互真相源 · 四列) + +**通用规则**(适用于下面所有浮层):每个浮层**只有一个可见关闭出口**(右上 ×,ID 记为 `X-close`);遮罩点击(ID 记为 `X-mask`)与 `Esc` 也能关,但**不视为可见出口**;关闭后焦点回到触发它的那个按钮,Tab 只在层内循环。这三条逐浮层过了一遍,结论在 `3d-审查报告.md` 的浮层表里。下表不再逐浮层重复这三条。 + +| ID | 元素 | 触发 | 反馈 | 何时不可点 | +|---|---|---|---|---| +| G-05 | 侧栏八个功能项(药丸浮栏,八项一页)+ 各页「功能入口」卡 | 点击 | 切到该页(hash 变、主区重绘);侧栏当前项转中性填充 + 满墨字(照参照物 `is-active`) | 从不可点 | +| G-06 | 顶栏「随手记」 | 点击 | 打开随手记浮层,焦点进输入框 | 从不可点 | +| G-08 | 两处「假设」徽章(P1 页头 / P8「商单与收支」块头) | 点击 | 打开假设浮层(逐条给复核人 / 复核时机 / 结论落点) | 从不可点 | +| G-10 | P1「全局检索与随手记」块里的「全局检索」 | 点击 | 打开检索浮层,焦点进输入框 | 从不可点 | +| X-close | 各浮层右上 × | 点击 | 关闭浮层;焦点回触发它的按钮 | 从不可点 | +| X-mask | 浮层遮罩(层外空白区) | 点击 | 关闭浮层;焦点回触发它的按钮 | 没有浮层时不渲染 | +| STATE-NORMAL | 状态面板 · 「回到正常内容」 | 点击 | 该页回 `ok` 态,主操作恢复 | 仅在非 `ok` 态出现 | +| STATE-RETRY | 出错态 · 「重试一次」 | 点击 | 提示已重试(示意);不改数据 | 仅在 `error` 态出现 | +| STATE-GO | 空态 · 「去〈某页〉」 | 点击 | 跳到该页;浮层关 | 仅在 `empty` 态、且该页定义了去处时出现 | +| R-01 | 随手记浮层 · 输入框 | 输入 | 内容非空时「保存」由禁用转可用 | 从不可点(可输入) | +| R-02 | 随手记浮层 · 保存 | 点击 | 写入选题库「待做」;提示 1.5s 后消失;浮层关闭 | 输入为空时 `:disabled` | +| R-03 | 随手记浮层 · 取消 | 点击 | 关闭,不写入;焦点回触发按钮 | 从不可点 | +| S-01 | 检索浮层 · 输入框 | 输入 | 结果列表按关键字过滤;无结果显示空态行 | 从不可点(可输入) | +| S-02 | 检索浮层 · 结果项 | 点击 | 跳到该结果所属的页;浮层关闭 | 无结果时列表为空(不渲染可点项) | +| A-01 | 假设浮层 · 两处假设条目 | 展示 | 只读,逐条给复核人 / 时机 / 落点 | 不适用(只读,非控件) | +| P1-01 | 今日待办项(每条) | 点击 | 跳到该待办所属的页(选题类→P2、在写→P4、待审→P5、待复盘→P7、待核销→P8) | 该条为「已超期未处理」时仍可点,但带提醒标 | +| P1-02 | 账号矩阵行 | 点击 | 跳到 P6 并选中该账号 | 从不可点 | +| P1-03 | 账号矩阵行 · 「看复盘」 | 点击 | 跳到 P7 并选中该账号的待复盘内容 | 该账号没有可复盘内容时禁用 | +| P1-04 | 异常值提示条目 | 点击 | 跳到 P2 并定位到该对标内容 | 无异常值时整块显示空态(不渲染可点项) | +| P1-05 | 本月最好的一条 | 点击 | 跳到 P7 的该条复盘 | 无数据时禁用 | +| P2-01 | 监控概览 · 「低粉爆款」数 | 点击 | 筛选对标内容列表(只看爆款) | 数为 0 时禁用 | +| P2-02 | 监控概览 · 「异常值」数 | 点击 | 筛选对标内容列表(只看异常) | 数为 0 时禁用 | +| P2-03 | 对标内容行 · 「发起拆解」 | 点击 | 跳到 P3 并带着这条素材(预填原文与出处) | 从不可点 | +| P2-04 | 评论区洞察子区 · 展开/收起 | 点击 | 展开子区并开始抓取(显示抓取中) | 从不可点 | +| P2-05 | 评论区洞察 · 「抓取评论」 | 点击 | 进入抓取中 → 出候选选题列表 | 抓取中时禁用 | +| P2-06 | 候选选题 · 「采纳」 | 点击 | 该条进选题库「待做」;候选行标为已采纳 | 该条已采纳时禁用 | +| P2-07 | 候选选题 · 「忽略」 | 点击 | 候选行标为已忽略(可恢复) | 该条已忽略时禁用 | +| P2-08 | 选题库 · 分组 tab(待做/在写/已用) | 点击 | 列表切换成该组 | 从不可点 | +| P2-09 | 选题行 · 「转入创作」 | 点击 | 建当前内容并跳到 P4;选题转「在写」 | 未选账号时禁用(并在行内说明) | +| P2-10 | 选题行 · 「拆解」 | 点击 | 跳到 P3 并把该选题当成素材 | 从不可点 | +| P3-01 | 分区切换 tab(角度/结构/开场白/标题) | 点击 | 条目列表换成该分区 | 从不可点 | +| P3-02 | 条目行 | 点击 | 右区显示单条详情(原文 / 出处 / 草稿标记) | 从不可点 | +| P3-03 | 待入库区 · 「入库」 | 点击 | 无出处的条目被门禁挡住并说明原因;有出处的转「已入库」 | **无出处或原文缺失时禁用**(门禁) | +| P3-04 | 单条详情 · 「引用到创作台」 | 点击 | 跳到 P4 并把该条目加进资产引用区 | 从不可点 | +| P4-01 | 环节进度 · 七个环节(逐项) | 点击 | 切到该环节;只许回退到已完成的环节 | 未到达的后续环节禁用 | +| P4-02 | 当前环节工作区 · 内容输入框 | 输入 | 「开始这一步」由禁用转可用 | 从不可点(可输入) | +| P4-03 | 当前环节工作区 · 「开始这一步」 | 点击 | 生成中 → 产出内容(写进本环节) | 输入为空时禁用 | +| P4-04 | 资产引用区 · 「从资产库拿一条」 | 点击 | 展开选择器;选中后收进引用区并显示来源 | 资产库为空时禁用并说明 | +| PICK-ASSET | 资产选择器 · 单条 | 点击 | 收进引用区并显示来源;浮层关 | 已引用过的不渲染可点项 | +| P4-05 | 资产引用区 · 「移除引用」 | 点击 | 从引用区移除该条 | 引用区为空时不渲染 | +| P4-06 | 「推进到下一环节」 | 点击 | 当前环节 +1;进度条与工作区跟着变 | 文案与封面缺一,进检查态时禁用(封面缺只提示) | +| P4-07 | 版本列表 · 展开/收起 | 点击 | 展开版本列表浮层 | 从不可点 | +| P4-08 | 版本行 · 「切为当前版」 | 点击 | 该版标为当前版;当前内容标识的版本号跟着变 | 该版已是当前版时禁用 | +| P5-01 | 目标选择 · 展开/收起 | 点击 | 展开账号与平台多选 | 从不可点 | +| P5-02 | 目标选择 · 账号项 | 点击 | 勾选/取消;版本列表跟着增删一版 | 从不可点 | +| P5-03 | 目标选择 · 平台项 | 点击 | 勾选/取消;同上 | 从不可点 | +| P5-04 | 版本预览 tab(逐版) | 点击 | 右区换成该版内容 | 从不可点 | +| P5-05 | 版本内容编辑框 | 输入 | 保存按钮由禁用转可用;标为「已改」 | 从不可点(可输入) | +| P5-06 | 版本内容 · 「保存本版」 | 点击 | 该版内容更新;检查结果跟着重算(回到未检) | 无改动时禁用 | +| P5-07 | 检查结果 · 「复检」 | 点击 | 检查中 → 出结论(硬拦 / 软劝 / 通过) | 检查中时禁用 | +| P5-08 | 「确认发布」 | 点击 | 打开二次确认浮层 | **有硬拦项时禁用**;无版本时禁用 | +| P5-09 | 二次确认 · 「确认发出」 | 点击 | 写发布记录(P8 出现一条);提示成功 | 从不可点 | +| P5-10 | 二次确认 · 「取消」 | 点击 | 关闭浮层,不发;焦点回触发按钮 | 从不可点 | +| P5-11 | 发布记录入口 | 点击 | 跳到 P8 | 从不可点 | +| P6-01 | 账号列表项 | 点击 | 切换右区画像 | 从不可点 | +| P6-02 | 画像六维字段(6 个输入) | 输入 | 「保存画像」由禁用转可用 | 非本人负责账号时禁用(改由角色判定) | +| P6-03 | 「保存画像」 | 点击 | 保存成功提示;未保存时离开给提示 | 无改动时禁用 | +| P6-04 | 记忆条目 · 展开/收起 | 点击 | 展开记忆列表(只追加,不可编辑) | 从不可点 | +| P6-05 | 关联内容行 | 点击 | 跳到 P4 的该条内容 | 无关联内容时整块空态 | +| P7-01 | 待复盘列表项 | 点击 | 右区换成该条的表现数据 | 从不可点 | +| P7-02 | 表现数据 · 「手工录入」 | 点击 | 数据读不到时的降级入口,展开输入 | 数据已读到时不渲染 | +| P7-03 | 归因结论区 · 文本 | 输入 | 「确认归因并回写」由禁用转可用 | 从不可点(可输入) | +| P7-04 | 「确认归因并回写」 | 点击 | 回写到当前账号画像:记忆 +1;显示回写目标 | 归因为空、或未选账号时禁用 | +| P7-05 | 历史复盘 · 展开/收起 | 点击 | 展开历史复盘结论 | 从不可点 | +| P8-01 | 发布记录行 | 点击 | 右区换成该条的对账详情 | 从不可点 | +| P8-02 | 「单条溯源」(可点入) | 点击 | 展开溯源:从记录回到内容与版本 | 从不可点 | +| P8-03 | 对账核对区 · 「核销」 | 点击 | 二次确认 → 该条标「已核销」 | 未选记录时禁用;记录未「已发布」时禁用 | +| CHECKOUT-OK | 核销二次确认 · 「确认核销」 | 点击 | 该条标「已核销」;提示成功;浮层关 | 从不可点 | +| CHECKOUT-CANCEL | 核销二次确认 · 「取消」 | 点击 | 关闭浮层,不核销;焦点回触发按钮 | 从不可点 | +| P8-04 | 「商单与收支」展开/收起 | 点击 | 展开收支条目 🔴 **本块是假设**(见 §三) | 从不可点 | + +⚠️ **「可见关闭出口」与「决策型关闭」是两件事,⛔ 不许混成一个数**:每个浮层的中性关闭出口只有一颗 ×(`X-close`),恰好 1 个;**「取消」这类带决策语义的按钮也能关层,但它不是「找出口」用的**,单独登记(`R-03` / `P5-10` / `CHECKOUT-CANCEL`)。这条口径是补出来的 —— 原先自检只数 `.layer-close` 这个类名,于是两颗可见的「取消」完全没进计数,两个二次确认层其实各有两个看得见的关闭控件,判据却报「出口 = 1」。逐浮层的核对结论与触发路径在 `3d-审查报告.md` §六。 + +**表外可点元素必须为 0** —— 3b 自检里有一条逐集合做双向差集的检查(`#/selftest` 路由自动跑,结果落 `3b-实测记录.md`)。 + +⚠️ **已撤销的 7 个 ID(不在表内,⛔ 不许再出现在 DOM 里)**:`G-01…G-04`(侧栏分板块后的「一级组」,扁平后没有这一层)、`G-07` 顶栏账号切换器、`G-09` 顶栏演示状态开关、`G-11` 收起侧栏。后三个是 2026-10-08 用户口径「**页面顶上弄这么多乱七八糟的东西**」的直接处置对象 —— 逐样来源排查与处置写在 `3d-审查报告.md` §十。⛔ 撤销一个 ID 时必须**同时把它的 DOM 删掉**,否则判据「页面上每个 data-act 都在清单里」会报红(本轮实测过)。 + +⚠️ **`A-01` 不是控件**:它是假设浮层里的只读展示行,本表把它列出来是为了让「假设有两处、逐条给复核人 / 时机 / 落点」这件事在清单里看得见。⇒ 它**不进实现清单**(原型里的 `IMPL` 表),自检也不该拿它去点。本表的控件 ID 与 `IMPL` 的键必须**互为子集且相等**,这条由 `_tools/mutate_test.py` 里的 M2/M3 两处变异盯着(漏登记 / 悬空声明各一种)。 + +### 2.5 组件规格(来源:选定套既有组件族) + +| 组件 | 规格(具体值) | 来源 | +|---|---|---| +| 按钮 · 主档 | 高 `40px`,内衬 `12/20`,字号 `16px`,字重 `600`,圆角 `26px`(药丸),底 `--accent`,字 `--on-accent` | 选定套 `--btn-radius/--btn-px/--btn-py`;字号 16 + 字重 600 是**必须的**(见下注) | +| 按钮 · 次档 | 高 `40px`,内衬 `12/20`,字号 `14px`,字重 `500`,圆角 `26px`,底 `--surface`,描边 1px `--line`,字 `--ink` | 同族 | +| 按钮 · 弱档(文字) | 高 `32px`,内衬 `6/12`,字号 `14px`,圆角 `26px`,无底无描边,字 `--accent-text` | 同族 | +| 卡片 · 密卡 | 内衬 `16px`,圆角 `16px`,底 `--surface`,L1 阴影 | 同族 | +| 卡片 · 宽松卡 | 内衬 `24px`,圆角 `24px`,底 `--surface`,L2 阴影 | 同族 `--card-radius/--card-pad` | +| 输入框 | 高 `36px`,内衬 `12/10`,圆角 `9px`,字号 `14px`,底 `--surface`,描边 1px `--line` | 同族 `--inp-*` | +| 徽章 / 状态标 | 高 `22px`,内衬 `2/8`,字号 `12px`,圆角 `999px`,无描边,底为对应状态色 8% 叠加 | 同族 `is-*` 修饰族 | +| 侧栏(`.sidebar`) | **药丸浮栏**:宽 `64px`、内衬 `3px`、圆角 `100px`、底色 `color-mix(in srgb, var(--ink) 5%, transparent)`、描边 `1px color-mix(in srgb, var(--ink) 12%, transparent)`;⛔ 无右边线。高度随内容、`align-self:center` 在 64px 列里垂直居中(⛔ 不拉满整屏) | tiaoyue `.app-sidebar` 实测(`w-16`=64 / `p-[3px]` / `rounded-[100px]` / `bg rgba(100,112,160,.08)` / `border 1px rgba(100,112,160,.14)`),色值换我方 `--ink` 派生;差异:参照物是真浮在页面上(`left:16px`,主区不缩进),我方仍占一列,见 `3d` §十三 | +| 侧栏导航项(`.nav-item` · 只有这一层) | **56 × 78 药丸**:圆角 `54px`、内衬 `16px`、段间距 `6px`、纵向居中;**图标 `24×24` 在上 + 名字 `12px/500/行高 16px` 在下,两者都常驻**(56 − 16×2 = 24px 内容宽 ⇒ 名字只能 2 字);项间**无 gap**;hover/当前态**只换颜色**(`--tfast`),⛔ 不移位、⛔ 不加阴影。非当前项字色 `--ink-faint`;当前项=填充 `color-mix(in srgb, var(--ink) 6%, transparent)` + 满墨 `--ink`(⛔ 不用品牌紫底)。78 = 内衬 32 + 图标 24 + 段间距 6 + 名字行高 16,**四个数动一个就破** | tiaoyue `.nav-item` 实测(`h-[78px] w-14` / `p-4` / `rounded-[54px]` / `gap-1.5` / `text-xs font-medium leading-4` / `is-active` bg `rgba(31,35,41,.06)` + 满墨 / `is-inactive` 字 `rgba(31,35,41,.55)`)。⚠️ 它的图标是**填充字形**(`fill` 走 `currentColor`),我方仍是 mcn-work-shop 那套线性描边图标 —— 换字形等于换一套图标,⛔ 本轮不换 | +| 导航提示(`.nav-tips-layer` / `.nav-tip`) | viewport 级浮层(`position:fixed; inset:0; pointer-events:none`);提示本体深底浅字(`--ink` 底 + `--surface` 字)、字号 `12px`、内衬 `6/8`、圆角 `8px`;跟着当前项的**右缘向右展开**,贴到窗口右缘时反向兜底。**内容=该页的一句话说明**(`NAV[].desc`) | tiaoyue `nav-tips-layer` / `nav-tips-viewport` / `is-expand-right`;它的提示行内容也是**说明文字**(实测「发现灵感与精选内容」)、⛔ 不是名字。⛔ 不做项内 `absolute`:`.sidebar` 是 `overflow-y:auto`,会被剪掉 | +| 页面统计条(`.home-stats` / `.stat-item`) | `grid auto-fit minmax(132px,1fr)`、间距 `16px`、**下边距 `6px`**(照参照物 `.home-stats{margin:0 0 6px}`,2026-10-08 第二轮由内联 `8px` 收进基类);每格白底 + 1px `--line` 描边 + 圆角 `16px` + 内衬 `12/16`;值 `20px/600` + `tabular-nums`,标签 `12px` `--ink-mute`。可点的格(P2 低粉爆款 / 异常值)**用同一套外观**,只有 hover 描边转 `--accent` | 照 P1 首页那一套;用户口径「每个板块的首页 样式参考 MCN工作台首页」 | +| 满宽表格(`.ds-table.tbl-dense`) | 容器 `.panel` + `.table-wrap`(`overflow-x:auto`);表头 `12px/600` `--ink-mute` + 下边框 1px `--line`;行内衬 `4/8`、行间 `border-top` 发丝线、单元格 `vertical-align:middle` + `nowrap`;实测行高 **31px** | 密度契约(一屏 ≥6 行)逼出来的紧凑档;形态照 3c 参照物 P1 的满宽表 | +| 栏内表(`.ds-table.tbl-side`) | 两栏**栏内**的列表:内衬同上,但 ⛔ **不套 `nowrap`** —— 窄栏里 nowrap 会把表推成横向滚动 | 同上,只在窄栏里用 | +| 行级微按钮(`.btn-micro`) | 高 `22px`、内衬 `0/8`、字号 `12px`、圆角 `999px`、无底、字色 `--accent-text`、`:disabled` 时透明度 `.45`。⛔ 表格行里不许用 32px 的 `.btn-sm`:实测会把整行撑到 45px,直接吃掉密度契约 | 同上 | +| 分段控件(`.seg` / `.seg-item`) | 容器 `gap 4px` + 可换行;项高 `32px`(`--c-btn-h-sm`)、内衬 `0/12`、圆角 `999px`、描边 1px `--line`、白底;**选中项 `.is-on` = 整块浅紫底 + `--accent-text` + 字重 600 + 描边转 `--accent`**;`:disabled` 透明度 `.45`。⛔ 不许再用「描边变黑」那套 | 2026-10-08 统一:P2 分组 / P3 分区 / P5 账号多选 / P5 平台多选 / P5 版本 tab **五处**原来一律是 `.btn btn-sm` +**内联** `style="border-color:var(--ink);font-weight:600"` | +| 表单字段(`.field`) | 字段块(标签 + 控件)之间的间距由 `.field + .field{ margin-top:16px }` 出;`.field > .seg{ margin-top:8px }` | 同上:P6 画像六维与 P5 目标选择原来靠内联 `margin-bottom` 一格一格铺 | +| 表格当前行(`.cell-name.is-on`) | 当前行的行名转 `--accent-text`。⚠️ 它是「选中态只有一套」在表格里的落法;⛔ 不许写成内联 `style="color:…"` | 2026-10-08 统一:P3/P6/P7/P8 四张表原来各自用内联 `color` 标当前行 | +| 两栏分栏(`.grid-main-side`) | 宽比 **1.35fr : .9fr**(照外部参考版的 `.grid.cols2`);左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列 | 用户口径「哪里左右布局的功能照着抄」 | +| 图标(唯一出口 `navSvg(page,size)`) | `viewBox 24` / `fill:none` / `stroke:currentColor` / **`stroke-width:2`** / `stroke-linecap:round` / `stroke-linejoin:round`;尺寸只有三个用法:**侧栏 20px、功能入口卡 22px、`≤640px` 的卡 16px**;颜色只有一处:`--accent-text`(品牌紫的文字档) | 规格**照参照物 mcn-work-shop 的 `svgIcon()` 学**(`public/app.js:201-207`:同样 24 / stroke 2 / 圆头圆角,尺寸卡 22、按钮 16)。⚠️ 参照物给图标配了 **8 个色相**(`ICON_COLORS`),⛔ 不学 —— 与基础层「同一层级保持一致重量、避免每张普通卡片用不同强调色」冲突;⚠️ 我方**只有 8 个图标**(八页各一),因为功能入口卡的图标=**目标页自己的图标**(同一目标在侧栏与卡片上是同一个),⛔ 不另造一套图标库 | +| 功能入口卡(`.data-card`) | **三段纵向**:白底 + 1px `--line` 描边 + 圆角 `16px`(tiaoyue)+ **阴影 `--sh-L1`** + 内衬 `16/16`、段间距 `6px`;卡内三行 —— **图标 `22px`(独占一行)/ 标题 `18px/600`(行高写死 1.35)/ 描述 `14px` `--ink-mute`(行高写死 1.35)**;网格 `.data-cards` `auto-fit minmax(200px,1fr)`、gap `16px`;hover = 描边转 `--accent`(⛔ 不做参照物的 `translateY(-2px)` 位移)。**实测卡高 111px**(参照物同宽下 113px)。`≤1000px` 隐描述;`≤640px` 紧凑档(内衬 `6/8`、图标 `16px`、标题 `16px`、网格最小宽 `160px`) | 2026-10-08 **第二轮**:用户看完第一版仍说「**功能入口的高度还是没有 参考 MCN 的首页的功能入口 按钮的样式和布局**」⇒ 回参照物 `style.css:387-392` + `app.js:332-336` 逐值量。高差 65px 的**主因是排布**(第一版把「图标+标题」并成 `.dc-line` 一行 ⇒ 少一段 + 少两次 `6px` 段间距),次因是内衬 `12/16`→`16/16` 与字号 `16/12`→`18/14`;另补一处原来完全没有的**卡阴影**。差值与「刻意不学」的 3 条(圆角 `12px`/`translateY` 位移/「一个功能一个色」)逐条记在 `3d-审查报告.md` §十二 | +| 功能入口那一行(`.sect-nav`) | **没有小标** —— 统计条之后直接排卡;下边距 `8px`(与后面 `.block` 的 `margin-top:32px` **折叠**,实际间距由 `.block` 决定) | 2026-10-08 第二轮删掉原来的 `<p>功能入口</p>`。两条理由缺一不可:①**参照物就没有**(`.home-stats` 直接接 `.data-cards`);②**密度契约逼的** —— 卡按参照物长高 43px,这 43px 得从别处还回去,而「小标 + 它与卡之间的 6px」合计 **24.6px(实测)**,是这一带最不值钱的高度(卡片自己写着去哪儿) | +| 问答区(`.qa-block` / `.qa-row`) | `.qa-block`:`border-top:1px dashed var(--line)` + `padding-top:8px` + `margin-top:16px`;`.qa-row`:内衬 `6/8`、字号 `14px`、行高 `1.55`;问 `--accent-text` + 500、答 `--ink-mute` 缩进 `1.2em` | 照参照物 `.func-card .qa{border-top:1px dashed}`(`style.css:78`)学的虚线分隔;⚠️ 它的「可复制行 hover 出 📋」**未学**(本项目还没有复制交互) | + +> 同屏主档按钮 ≤1(多步流程每步 ≤1):P1 无主档、P2/P3/P4/P5/P6/P7/P8 各 1 个 ✅ +> 实底底色 ≥2 种:主档 `--accent`、次档 `--surface`、状态标(ok/err/warn 三色 8% 叠加)✅ +> ⚠️ **主档按钮的 16px + 600 不是随手定的**:选定套记录 `#FFFFFF` 压 `#9e4cff` 只有 **4.26:1**(两形态一致,是品牌紫的固有属性),走**大字线 3:1** 才达标 ⇒ 主档按钮文字必须 ≥16px 且加粗;⛔ 小字(<16px 常规字重)压主色在本规范里没有合规解,故不允许出现。 + +--- + +## 三、两处假设的显式标注(⛔ 不当已确认需求用) + +②段 `2b-界面布局.md` §四 标了两处骨架受限。本轮**尚无用户结论**,按②段给的默认读法做,并在本份与原型里显式标注: + +| # | 受影响处 | 假设内容 | 本轮默认读法(按 2b §四) | 复核人 | 复核时机 | 结论落点 | +|---|---|---|---|---|---|---| +| 假设 1 | **P1 的形态**(横幅:`2b` §二 P1 末段) | 矩阵级视图是否真需要(1a 待复核第 5 条 + A1) | **按「需要矩阵级视图」做**:P1 = 矩阵总览,5 个板块全在。若复核为「不需要」,P1 降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换 | 主会话转用户 | ②段收口时一次性过;③段已按默认读法做,结论到了改这一处 | `2b` §四 + §二 P1;本轮落 `ui/DESIGN.md` 本节 + 原型 P1 标题行的「假设」徽章 | +| 假设 2 | **P8 的第 4 板块**「商单与收支」 | 商单对账进不进第一版、收支口径是否内容级(1a 待复核第 6 条 + A3) | **按「进第一版但属 P2、可整块缺」做**:第 4 板块**渲染出来但标「可点入 + 假设」**,并在展开后给一句「本块依赖未复核项」。第 1、2、3 板块不受影响 | 主会话转用户 | 同上 | `2b` §四 + §二 P8;本轮落 `ui/DESIGN.md` 本节 + 原型 P8 第 4 板块标题行的「假设」徽章 | + +**原型的兑现方式**(不占标题区、不写成注脚):两处各在自己的**板块标题同行右侧**挂一个「假设」徽章,**徽章本身可点**(`G-08`)—— 点开的那一份浮层逐条给出复核人 / 时机 / 落点。⛔ 2026-10-08 之前这个入口挂在顶栏(「假设 2 项」),已按用户口径「页面顶上弄这么多乱七八糟的东西」**改挂回徽章自己身上**:假设在哪,详情就在哪。⛔ 假设既没有被当已确认需求写死,也没有被编出答案。 + +--- + +## 四、Gate-1 方向门自检(硬闸,结果写在本份末尾) + +| # | 检查项 | 结论 | 依据 | +|---|---|---|---| +| 1 | 设计契约十二字段 | ✅ 过 | §一 十二字段全填,无空、无「待定」;重复项逐页列了次级信息;交互清单四列齐全且表外可点元素为 0(3b 实测复核) | +| 1b | 页型判定 | ✅ 过 | 全文工具型;D0 零 `.eyebrow` / 零 `.lead` / 零 `.hero`(原型里这三个类名出现 0 次,`#/selftest` 复核) | +| 2 | 结构骨架(翻译面) | ✅ 过 | 骨架档=主区+侧区(给了理由);板块落位照②段顺序、每块有文字标题;②段分档表每条信息都有落位(§1.2 逐页核对) | +| 2b | 骨架未漂 | ✅ 过 | 八页与板块逐条对得上 `2b`,本段未增删移动(见下表) | +| 3 | 状态覆盖 | ✅ 过 | §1.3 六态逐页有结论;`disabled` 与 `无权限` 分开写 | +| 4 | 令牌表 | ✅ 过 | §2.2/§2.3 色值、字体、间距两档(适用面已分开)、圆角、阴影全为具体值 | +| 4b | 字阶定值表 | ✅ 过 | 七档各一个 px(12/14/16/18/20/24/30),相邻差 2/2/2/2/4/6 ≥2 | +| 4c | 高度层级 | ✅ 过 | L1/L2/L3 每层 ≥2 层叠层,同层级同值 | +| 4d | 布局脚手架 | ✅ 过 | 侧栏 240/200px + 主区 `minmax(0,1fr)`;窄屏变化写具体(标签栏化) | +| 5 | 组件规格 | ✅ 过 | 按钮三档+卡片两档+输入框+徽章均为具体值;同屏主档 ≤1;实底 ≥2 种 | +| 6 | 反 slop | ✅ 过 | 无紫→粉渐变;标题用**展示体**(§2.3「标题字体」,2026-10-08 方案 A 补,⛔ 不用 `system-ui` 关键字);强调色允许位置已写明(§2.2) | +| 7 | 拒绝清单 | ✅ 过 | §1.1 ⑩ 共 **6** 条,每条带可判定判据(≥3 ✅) | +| 8 | token 引用完整性 | ✅ 过 | 三层结构;组件层只引语义层、语义层只引 primitive;无孤立 token | +| 9 | 分档兑现 | ✅ 过 | §1.2 逐页落位;常驻=零点击可见、可点入=一次点击可达;档位未被本段改动 | +| 10 | 供给核对 | ✅ 过 | §〇 已核;选定套 `design-system-tiaoyue`,与本目标记录一致(首次选定) | + +**骨架未漂逐页对照**(⛔ 本段未新增 / 移动 / 删除 / 合并): + +| 页 | ②段板块(照抄) | 原型落位 | 一致 | +|---|---|---|---| +| P1 | 今日待处理/账号矩阵列表/异常值提示/本月表现最好的一条/全局检索与随手记入口 | 同序 5 块(前两块**满宽顺排**) | ✅ | +| P2 | 对标监控概览/对标内容列表/评论区洞察区/选题库/灵感速记入口 | 同序 5 块 | ✅ | +| P3 | 分区切换/条目列表/单条详情/引用入口 | 同序 4 块 | ✅ | +| P4 | 当前内容标识/环节进度/当前环节工作区/资产引用区/版本列表 | 同序 5 块 | ✅ | +| P5 | 目标选择/各版本预览与逐版编辑/检查结果/确认发布/发布记录入口 | 同序 5 块 | ✅ | +| P6 | 账号列表/画像六维/记忆条目/关联内容 | 同序 4 块 | ✅ | +| P7 | 待复盘列表/这一条的表现数据/归因结论区/回写目标提示/历史复盘 | 同序 5 块 | ✅ | +| P8 | 发布记录列表/单条溯源/对账核对区/商单与收支 | 同序 4 块 | ✅ | + +> 板块的**排布位置**:每页的**主数据块**(该页吃密度契约的那张列表)一律做成**满宽表格**、单独成块;余下的块里有「列表/上下文 + 详情/动作」关系的,按 `layouts-tooling.md` §0 判为**侧区型**,在**块内**用左右两栏落实(P3 单条详情|引用入口、P5 各版本预览|检查结果、P6 记忆条目|关联内容、P7 表现数据+归因+改判|回写目标、P8 单条溯源|对账核对区);⛔ 这不是增删板块,是同一批板块在骨架档里的摆法(块内怎么摆归③段)。编辑型板块(P4 环节工作区、P6 画像六维、P5 版本逐版编辑、P8 对账核对区)保持原形态 —— 它们的任务是「填 / 改」,不是「扫一行行」。 +> +> **P1 的前两块是满宽顺排**(2026-10-08 第三轮定案):②段把「今日待处理」和「账号矩阵列表」列为第 1、2 块,本段按用户口径「gpt 给的布局……照着抄」把两块都做成**满宽表格、上下顺排**(参照物 P1 就是这两张顺排的满宽表)。⛔ 上一轮这里是「左右并排」——那一版的理由是密度判据(并排放得下 10 行、单列只放得下 5 行);本轮把行高从 67px 压到 **31px**(每格一个短值 + 22px 的 `.btn-micro`)之后,**顺排也够 6 行**(实测首行顶 708px),于是「照抄参照物」与「守住密度契约」不再冲突。实测过程记在 `3b-实测记录.md` §五。 +> 若复核认为并排也算动了骨架,回退办法只有一条:把密度判据在 1440×900 下放宽到 ≥5 行 —— **两件事必须挑一件,不能都不做**(原判据下,单列连 6 行都够不着)。 + +--- + +## 五、缺口与证据边界(⛔ 不假装支持) + +1. **反 AI 味 / 无障碍 / 表单校验 / 动效纪律的逐项数值判据本次无供给来源** —— 这四项出自 §供给·工艺数值判据 的**可选档**(`assets/open-design/craft/` 13 份),本轮未动用可选档 ⇒ ⛔ 不凭感觉编一套顶上。本段实际应用的是**默认档**判据:`execution-runbook.md` §3.3/§3.4 + `layouts-tooling.md` §5.5(五条反「实习生审美」硬判据)。四条已按默认档能做到的部分执行(如 focus-visible 三态、tabular-nums、防溢出三件套、间距只用登记刻度)。 +2. **暗色主题本轮不做** —— 选定套的暗色与亮色是两套独立基线,规则是「要暗色就整套切」(`known-conflicts.md` C-01),且暗色实测只覆盖 1 个页面(`/team/onboarding`),而该页正是选定套 §〇 明令生成时避开的页;哪一套亮色才是主线**尚未裁决**。⇒ 本轮只做亮色基线(9 页 clipper 实测),⛔ 不与暗色混搭。要做暗色需先裁决 C-01,属技能侧动作。 +3. **`--warn` 是本项目追加的第 14 个语义色** —— 选定套亮色基线只有 ok/err,无 warn;而②段 P5 要求「硬的拦住、软的只提醒」必须有可见区分。追加值与其对比度实测记在 §六。 +4. **`1c-用户画像.md` 是零访谈画像** —— 主用户的画像骨架来自 1a §四 三行角色描述,无问卷、无访谈、无行为数据。界面里凡涉及「角色能看什么」的判据都基于它,**不得对外说成基于用户调研**。 +5. **3c GPT 会诊本轮未取得外部审查** —— 见 `3c-GPT会诊.md`。未取得 ≠ 已通过。 +6. **窄视口 390×844 现已可测(2026-10-08 第七轮解除)** —— 旧写法 `chrome.exe --headless --window-size` 被 Chrome 的窗口宽下限卡在 516px(只能拿到 500px 视口),所以此前契约里凡写 390 的地方一律按 **500×844 实测** 记。现在 `_tools/cap.py` 改走 CDP 的 `Emulation.setDeviceMetricsOverride`,**视口是声明式的、要多少是多少**:已实测 **390×844**(PNG 尺寸当场比对通过)⇒ 这条限制作废。⚠️ 但 390 的**密度**还没纳入逐视口表,⛔ 不许把「能测」当成「达标」写。 +7. **密度判据(一屏 ≥6 行)现在只剩 500×844 一个视口不达标**(2026-10-08 第八轮,用户拍板「A 方案」)。⛔ 判据一个字没改 —— 判据原文(`layouts-tooling.md` §1)是「一屏可见行数 ≥ 6(900px 高时)」,**不带宽度条件**。**2026-10-08 第八轮整表重测**(A 方案 + 移动档滚动条修复之后): + +| 视口 | P1 账号矩阵(A 方案前 → 后) | P2 对标列表 | 页面外壳 | +|---|---|---|---| +| 1440 / 1024 / 900 / 820 ×900 | 701 → 701px,**6–7 行** ✅(一格未动) | 13–14 行 | 顶栏 49px、侧栏 64px | +| 1280 / 1000 / 960 / 920 / 901 / 840 ×900 | 676–701 → 676–701px ✅(一格未动) | 13–14 行 | 顶栏 49px、侧栏 64px | +| **768 ×900** | 779 → **676px**,**3 → 7 行** ✅ | 14 行 | 顶栏 49px、侧栏 64px | +| **700 ×900** | 872 → **676px**,**0 → 7 行** ✅ | 11 行 | 顶栏 49px、侧栏 64px | +| **640 ×900** | 700 → **685px**,**6 行** ✅ | 13 行 | 顶栏 57px、侧栏转横滚标签条 | +| **560 ×900** | 808 → **700px**,**2 → 6 行** ✅ | 10 行 | 顶栏 57px、侧栏转横滚标签条 | +| 500 ×844 | 882 → **773px**,**−2 → 2 行** ❌ | 8 行 | 顶栏 57px、侧栏转横滚标签条 | + +> 🔴 **本表 2026-10-08 第八轮整表重测替换(用户拍板「A 方案」)。** 四处转绿:768(3→7 行)、700(0→7 行)、560(2→6 行)、640(首行顶再降 15px);500×844 由 −2 行回到 2 行,**仍是唯一不达标的一个**。其余 10 个视口**一格未动**。 +> +> **A 方案做了两件事**(都在 `≤1000 / ≤820` 两档生效,`auto-fit` **只在真装不下时才缩** ⇒ 宽屏一个像素不动): +> ① 功能入口卡最小宽 `200 → 160px`(768 / 700 的卡由两行折行回到一行);② 统计条最小宽 `132 → 96px`(700 的 4 格由两行回到一行)。 +> 外加一处**真缺陷**:移动档标签条里 16px 高的横向滚动条(压进 52px 高的条子里 ⇒ 三成高度是灰杠,还白吃 16px 主区)已藏轨 —— 这是 560 由 5 行到 6 行的那 1 行的来源。 +> +> ⚠️ **上一版的错数已改正**:上一版把 **768×900 记成 7 行**,在**改前的版本上**实测是 **5 行 ❌**(首行顶 741px)⇒ 那条数字是错的;错因是旧取证通道的视口宽度歧义(768 恰好卡在卡片「3 列/2 列」阈值上,只差 7px),换成 CDP 声明式视口后不再有这个问题。 +> +> 这张表本轮是当**对照**用的:同一台机器、同一套判据,跑了「改前(`_scratch/base.html`)」与「改后」两版各 11 个视口,**PASS/FAIL 逐格完全一致** —— 绿:1440 / 1024 / 1000 / 901 / 900 / 820 / 640;红:768 / 700 / 560 / 500。⇒ 卡长高 43px 这件事是**从别处把高度还回去**做到的,⛔ 不是拿密度换的。 +> +> 还法(实测 P1 首行顶 740 → **701**,共 −39px):①删掉「功能入口」小标(−24.6)②统计条下边距 `8 → 6`(−2)③块标题与内容之间的间距 `.block-head` `12 → 8`(P1 上方有三处,−12)。`≤640` 一档另追加一条:卡内衬 `8/12 → 6/8`、图标 `18 → 16`、标题 `18 → 16`、`.block` 上边距 `32 → 24`(实测 724 → **700**,−24px)。 +> +> ⚠️ **归属必须说清**:本轮修的是**我自己刚造成的**回归(改卡前 697/6 ✅ → 改完 740/5 ❌)。**768 / 700 / 560 / 500 这四个视口的红是改前就有的,与本轮无关** —— 768/700 的根因是卡块在 768 折成两行、统计条在 700 折成两行;500 是已知缺口。⛔ 本轮没有顺手改它们,免得把「本轮改了什么」和「本来就有什么」搅在一起。 +> +> ⚠️ 中途出过一次**窄屏回归**,值得记:加图标那一轮只量了 1440(697px,6 行 ✅)就以为完事,回头跑逐视口表才发现 **640 由 5 行掉到 3 行** —— 原因是卡片变高又加上网格最小宽 180→200,608px 的主区装不下三张卡,折成两行、卡块高度翻倍。**只量契约视口、不回量窄屏,是会漏的。**(第七轮又犯了一次同类错:改完只量 1440,是逐视口表再次把它抓出来。) + +成因仍是**页面外壳吃掉首屏**,不是行变肥:行高 31px、各行差 0px、块内分隔 1px,这三条在任何视口都 PASS。三条出路:①把支持宽度下限写成 ≥640px(依据:`1a §七` 已明确第一版不做移动端 App);②压掉每行的次级信息(那是②段定的档位,③段不许改 ⇒ 得回②段改);③动 500px 档的页面外壳。**这三条都要用户拍板,本段一条都没选。** 详见 `3d-审查报告.md` §三 B-15。 + +> **2026-10-08 第三轮实测:照搬外部参考版那版排版,到底要付什么代价。** 用户看过的外部参考版(`3c-GPT参考版.md`)P1 是**满宽表格顺排**:指标条 → 今日待处理表 → 账号矩阵表。上一轮试过「只改顺排、别的都不动」:**账号矩阵首行顶 724px、行距 67px ⇒ 一屏只装得下 2 行**。本轮把这一版**真的照搬了**(用户口径「gpt 给的布局……照着抄」),同时把每格压成一个短值、行级动作降到 22px 的 `.btn-micro`、行内衬收到 `4/8` ⇒ **行高 31px,首行顶 708px,一屏 6 行(达标)**。⇒ 结论是:**满宽表格顺排与「一屏 ≥6 行」可以兼得,但代价是行高必须压到 31px 上下**(参照物那版行高约 50px,照 50px 来只能装 3 行)。行里的次级信息按「一格一个短值」拆列保留(②段的档位一条没砍),截断掉的只是省略号,完整原文挂在 `title` 上。 +8. **截图通道与 DOM 通道的视口口径不同(已修,记账)** —— 同一台机器、同一个 `--window-size`,`--dump-dom` 给的是「窗口 − 16×95」,`--screenshot` 给的就是窗口本身。本轮之前所有截图都因此比标称大 16×95(「1440×900」实际 1456×995)。现已按模式分开算,并要求每次截图后从 PNG 的 IHDR 读真实像素跟目标比,不等即报红。详见 `3b-实测记录.md` §五。 +9. **3c 那次独立评审不是「外部 GPT 会诊」** —— 本会话没有对外模型通道,改用了隔离上下文的独立评审执行者(不看源码、不继承制作对话)。它符合 `visual-review.md` 对「隔离执行者」的要求,但与 `SKILL.md` §3c 的异厂商外部审查**不是同一条通道**。**未取得外部审查 ≠ 已通过。** 见 `3c-GPT会诊.md` §〇。 +10. **外壳「整页不滚」曾等于「整页不能滚」(2026-10-08 已修,记账)** —— 只抄了 `html,body{height:100%;overflow:hidden}` 而没约束高度链,`.app` 跟着内容长高(1440×900 下 P1 实测 1543px)、`.view` 自己不滚,真正的滚动落在 `<body>` 上,而 body 是 hidden ⇒ **折叠线以下的内容永远拿不到,滚动条也没有**(异常值提示 / 本月表现最好 / 全局检索三块在真机里看不到)。修法:`.app{height:100vh}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`;新增判据「纵向滚动只由主区承担」(自检项数 81 → 82),并配变异 **M14** 证明它不是恒绿。同一处还牵出一个更坏的:自检在窄视口量到的密度**是假数**(守卫只复位了 `window`,实际滚的是 `<body>`)⇒ 旧版「≤767px 才不达标」的结论作废,真边界是 ≤900px。详见 `3b-实测记录.md` §六 第 16、17 条与 §五。 + +--- + +## 六、数值取证登记(3d 回填处) + +下表「实测值」全部由原型自带的 `#/selftest` 算出来(DOM 取值 + 真实像素计算),⛔ 不是目测。取值口径写在「取法」列;复跑命令见 `3b-实测记录.md`。 + +| 项 | 契约值 | 实测值 | 取法 | +|---|---|---|---| +| 强调色填充面积占比 | ≤5% | **0.52%**(八页最高一页:创作台;1 个填充块) | DOM 取值:逐个元素比 `backgroundColor` ≡ `--accent`,与视口求交后累加 ÷ 视口面积;不含 选中项浅底(`color-mix` 调出的不算填充)/ 描边 / 文字色 | +| `--warn` `#8a5a00` 对 `--surface` 对比度 | ≥4.5:1 | **5.93:1** | 真实像素计算:WCAG 相对亮度 | +| `--accent-text` `#963dff` 对 `--surface` 对比度 | ≥4.5:1 | **4.76:1** | 同上 | +| `--ink-faint` `#8a887f` 对 `--surface` 对比度 | ≥3:1(仅非正文) | **3.55:1** | 同上 | +| 一屏可容纳记录行数(P1 账号矩阵) | ≥6 @900px 高(⛔ 原文不分档) | **6 行** @契约视口 1440×900(首行顶 697px、行距 31px) | DOM 取值:首屏可用高度 ÷ 行距。⚠️ 判据是「装得下几行」,不是「实际渲染几行」—— 示意数据只有 5 条,实际永远是 5 行(数据用尽,非被截断)。⛔ 逐视口的完整实测表只写在 §五 第 7 条一处,这里不重复 | +| 一屏可容纳记录行数(P2 对标列表) | ≥6 @900px 高 | **13 行** @1440×900(首行顶 471px、行距 31px) | 同上。⚠️ 该块本轮已由行式列表改成满宽表格 ⇒ 容量从 6 行跳到 14 行,**任何视口都达标** | +| P1 行高齐(本段追加判据) | 各行差 ≤2px | **31–31px,差 0px**(十三个视口一致) | DOM 取值:逐行 `getBoundingClientRect().height` | +| 视觉层间距 / 块内相邻行分隔 比值 | ≥2 | **32px / 1px = 32**(4 个视觉层) | DOM 取值。⚠️ 表格行的分隔线画在 `td` 的 `border-top` 上(不是 `.list-row` 自己的),取值要跳过首行、取各行的最大值;⚠️ 除数为 0 时判据作废,已加 0 守卫 | +| 实际在用字号档数(P1) | 4–6 | **6 档**:12 / 14 / 16 / 18 / 20 / 24 px(相邻差 2/2/2/2/4) | DOM 取值:叶子节点 computedStyle | +| 块间距 / 块内间距 比值 | ≥2 | **32 / 8–16 ⇒ 2.0–4.0** | 令牌登记值 + DOM 复核(`gap` 全部落在登记刻度内,9 个刻度) | +| 横向溢出 | 0 | **0**(十三个视口,八页逐页亦为 0) | DOM 取值:`scrollWidth − clientWidth` | +| 内联样式越权(本段追加判据) | 选中态 0 处 / 字号 0 处 | **八页全为 0** | DOM 取值:逐页数 `[style*=border-color]` + `[style*=color]` + `[style*=font-size]` | +| 浮层中性关闭出口 | 恰好 1 | **7 / 7 个浮层均为 1**(另有决策型关闭 0–1 个,单列报数,⛔ 不混进这个数) | DOM 取值:可见的 `[data-act="X-close"]` 计数 | +| 同屏主档按钮 | ≤1 | **逐页 1 个**;P1 无主档(本页只用弱档) | DOM 取值:逐页统计实底按钮 | +| 顶栏高度 | 未写死(只看有没有折行) | **49px**(单行;只放「产品名 + 随手记」两项,**任何宽度都不折行**)。⚠️ 旧值 69px / 93px 都是演示下拉还在的时候 | DOM 取值 | + +**同轮实测的其它数值**(一并登记,供 3d 复核): + +- P1 账号矩阵:首行顶 697px、行距 31px;块落位 今日待处理@333+249 / 账号矩阵列表@614+249(上下顺排)/ 异常值提示@895+201 / 全局检索与随手记@1128+231。 +- P2:对标监控概览@143+121 / 对标内容列表@389+249 / 评论区洞察@670+316 / 灵感速记@1018+99;对标列表首行顶 471px、容量 13 行。 +- P1 按钮高度集合 32px(本页主档不用实底;表格行内的动作走 22px 的 `.btn-micro`,⛔ 不进「按钮高度层级」这一档)。 +- 控制台报错 **0 条**;量尺寸时四个滚动容器(window / html / body / `.view`)全在零点(两页均核)。 +- 强调色填充块数只有 1 个 —— 工具型页面按要求把实底压到最少,主档按钮才用它。 +- 侧栏实测(**第七轮**):栏 **64px** 宽、药丸盒高 **664px**(品牌 32 + 8 项 × 78 + 内衬 6 + 描边 2)垂直居中;导航项 **8 个**、每项 **56×78**、图标 `24×24`(`stroke-width 2`)、名字 `12px/500`;`#nav` 直接子元素**全是 `.nav-item`**(第二层 0 个)。`≤640` 转通栏横条后项高 **36px**。 +- 功能入口卡实测(**第七轮重测**):**17 张**(八页各 2–3 张),每张=三段纵向「22px 图标/18px·600 标题/14px 描述」;网格 `minmax(200px,1fr)`、gap `16px`;**卡高 111px**(同视口 1249 下,参照物 113px —— 差 2px 来自「描述一行 vs 两行」的取舍,逐值对照见 `3d-审查报告.md` §十二)。 +- 界面总宽度 1440 时(实测):`.view` clientWidth **1361**(内容宽 1297);统计条 4 格 × **312.25**(高 77.59);功能入口卡 3 张 × **421.66**(高 **111.19**:内衬 32 + 描边 2 + 图标 22 + 段间距 6 + 标题 24.3 + 段间距 6 + 描述 18.89);`.block-head` 与内容间距 **8px**、统计条下边距 **6px**;P1 十行数据行高 **30.5–31px**(差 ≤0.5px,扫表节奏齐)。 +- 顶栏实测 **49px**,内容只有两项(产品名 + 随手记);主区 clientH 851px / scrollH 1356px。 + +> 契约里写了数字的,3d 已逐条实测回填,「契约值 / 实测值」并排列进 `3d-审查报告.md` §六。⛔ 不目测。 + +--- + +## 七、修订记录(收口后回填) + +| 轮次 | 改了什么 | 为什么 | +|---|---|---| +| 3a 初版 | 契约、令牌、交互清单、假设标注、Gate-1 自检 | 本份首出 | +| 3d 收口 | ①§1.1 ⑨ 的实测覆盖从 4 个视口改成 7 个;②交互清单补 `CHECKOUT-CANCEL`、`STATE-NORMAL` 按钮文案改「回到正常内容」,并新写「中性出口 / 决策型关闭」的口径说明;③§四 里 P1 并排的反事实数按实测重填(604px→530px、3 行→5 行、209px→214px);④§五 第 7 条整条重写(撤掉自设分档,改成如实登记 ≤767px 的不达标),新增第 8、9 条;⑤§六 表内 8 处旧值按实测回填,并裁掉与 §五 重复的逐视口数 | 收口时逐条实测回填;同时把「同一事实只写一处」落实到密度这项上 | +| 按新技能口径重生成(2026-10-08) | ①§〇 供给口径改成「`oil-ui-pro` **基础层** + 其余**叠加层**」;②§1.1 第 4 条入场编排判据改成「⛔ 不做**逐区块**编排、`@keyframes` ≤1」;③§2.2 强调色允许位置去掉「左侧 3px 指示条」,改**整块浅底**;④§2.5 侧栏导航项改成整块浅紫底 + 字重 600;⑤§六「实际在用字号档数」判据 `≥3` → `4–6`;⑥§六 强调色取值口径去掉「3px 左侧标条」 | 全局技能包同日改了三处口径(左色条禁令、入场编排对齐基础层、在用字号档 4–6 档),本份是按旧口径出的 ⇒ 按新口径重生成 | +| 方案 A 补标题字体(2026-10-08) | §2.3 新增「标题字体」=**展示体**(宋体系);产物加 `--font-display` 令牌并应用到 `h1` / `h2` / `.brand`;§四 Gate-1 第 6 项(反 slop)同步 | 用户拍板方案 A:选定套只给一套系统黑体栈,标题没有自己的性格 —— 与基础层 `oil-ui-pro`「标题要有自己的性格」有距离,也不符「字族 2–3」的对照意图 | +| 外壳分板块 + P1 功能入口卡挪位(2026-10-08) | ①§1① ⑤ 补三条:导航层级(大功能板块 + 每板块一个主页面)、每块主页面的收口形态、P1 只落一处;②§2.3 组件表补「侧栏板块 / 主页标记 / 板块功能入口卡」三行;③§2.4 交互清单 G-01…G-05 注明「=该块主页面入口」「含四个主页面」;④§五 第 7 条下补一段实测(照搬外部参考版的满宽表格顺排 ⇒ 一屏 2 行,压到单行仍 4 行);⑤产物:`#nav` 补基础样式 + 板块间发丝线,导航项加「主页」小标,P1 的功能入口卡从统计条下面移到「今日待处理 + 账号矩阵」之后并排 | 用户 2026-10-08 口径「左侧导航分大功能板块,每个板块一个主页面」+「功能入口还是卡片的形式,并排放到数据下面」 | +| 导航收一层 + 照抄参考版左右布局(2026-10-08) | ①§1① ⑤「导航层级」改成**只有一层=四个大板块**;②同处「主页面的收口形态」改成**四个主页面全铺**;③§1 ⑨ 断点表加 `901–1000` 行、`640–900` 行补 `.grid-main-side`;④§2.3 组件表换成「侧栏板块项(只有这一层)/两栏分栏「.grid-main-side」/功能入口卡」;⑤§2.4 G-05 由「二级页项 P1–P8」改成「各主页面上的功能入口卡」;⑥§五 第 7 条整表重测替换(边界仍是 901px) | 用户 2026-10-08 口径「左侧功能导航 只有大板块的导航 只有一层」+「好好看看 gpt 的原型设计,哪里左右布局的功能照着抄」。产物侧:导航改一层;P1 异常值提示|本月最好、P2 评论区洞察|选题库、P4 工作区|产出+资产引用+版本、P6 记忆条目|关联内容、P7 左(待复盘项+表现数据)|右(归因+确认改判+回写)、P8 对账核对区|商单与收支 全部改两栏;宽比 1:1 → 3:2 | +| 外壳高度链 + 密度重测(2026-10-08) | ①§1 ⑨ 断点表加一行 `901–1024`,并新增「滚动容器」一段(高度链三件套);②§1 ⑨ 与 §五 第 7 条的密度表**整表重测替换**,边界由「768px」改成「901px」;③§五 新增第 10 条(整页不能滚的缺陷 + 窄视口密度是假数);④§五 第 7 条的三条出路里,①的门槛同步改成 ≥901px | 修外壳时牵出两个真缺陷:整页滚不动(内容拿不到)、自检在窄视口量密度是假数(假绿)。见 `3b-实测记录.md` §六 第 16、17 条 | +| 导航改 tiaoyue 图标栏 + 八页统一 P1 页壳 + 主列表表格化(2026-10-08 第三轮) | ①§1① ⑤ 重写:导航层级=**一层八个功能项**;新增「侧栏形态=照 tiaoyue `app-sidebar` 的 64px 图标栏(`nav-item`/`nav-icon`/`nav-tip`,悬停向右浮出名字)」;「主页面的收口形态」改成**八页统一**(页头 → 统计条 → 功能入口卡 → 满宽表格主数据块 → 一处两栏 → 尾块);②§1.1 ④ 四个列表由「行式列表」改「满宽表格」;③§1 ⑨ 断点表整表重写(侧栏 64px 定值、≤640 转带名字的横滚标签条);④§2.3 布局脚手架行改成 64px + 满宽表格;⑤§2.5 组件表把「侧栏导航项 / 侧栏板块项」两行换成「侧栏导航项(图标栏)/导航提示(`.nav-tips-layer`)/页面统计条/满宽表格/栏内表/行级微按钮」六行;⑥§2.4 G-05 改成「侧栏八个功能项 + 各页功能入口卡」;⑦§五 第 7 条密度表**第三轮整表重测替换**(边界 901px → **768px**,并记下「主区越窄反而越差」的反直觉实测);⑧§五 第 7 条下那段「照搬参考版要付什么代价」重写(已照搬,行高 31px 即可兼得);⑨§六 五处旧值按实测回填(10 行→6 行、67-68px→31-31px、5 档→6 档) | 用户 2026-10-08 两条口径:「左侧导航参考 tiaoyue 的导航」+「每个板块的首页 样式参考 MCN工作台首页」。产物侧:`NAV` 改图标栏(8 个内联 SVG + 视口级提示浮层)、`--nav-w` 240→64、八页各补统计条与功能入口卡、P2/P3/P5/P6/P7/P8 的主列表改满宽表格;配套修掉两处**假变异**(M2/M8 注入点跟着形态重指) | +| 顶栏清杂项(2026-10-08 第四轮) | ①§2.4 删掉 `G-07`/`G-09`/`G-11` 三行,`G-08` 改成「两处「假设」徽章」,`G-10` 改成「P1 内那一处」;表下新增「已撤销的 7 个 ID」说明;②§三 假设的兑现方式改成「徽章本身可点」(不再提顶栏入口);③§1 ⑨ 断点表删掉两处顶栏补丁,改成「顶栏不随断点变化」;④§五 第 7 条密度表**第四轮整表重测**(顶栏 49px 全宽度恒定;并**修正 P2 一列的旧数**:P2 已表格化 ⇒ 14 行,不是 6/7 行);⑤§六 三处旧值回填(顶栏 69px→49px、P1 首行顶 708→688、P2 6 行→14 行) | 用户 2026-10-08 口径「**页面顶上弄这么多乱七八糟的东西 是那个技能那个规则引起的 需要详细排查 定位 删除**」。逐样来源排查落在 `3d-审查报告.md` §十:六样里**没有一样是技能要求的** —— 收起侧栏与面包屑来自本项目参照物笔记、两个演示下拉是我造的、全局检索与②段 P1 页内重复、假设入口是我自己挂在顶栏的第二处;唯一被②段硬要求的是**随手记**(`2b` §286「任意页面一次点击内」)⇒ 留。产物侧:顶栏收成「产品名 + 随手记」两项,内衬 16→8 ⇒ 49px | +| 组件口径统一 + 新判据(2026-10-08 第五轮) | ①§1.1 ⑩ 新增第 6 条「⛔ 不用内联样式表达选中态或覆盖字号」,§四 Gate-1 第 7 项由「共 5 条」改「共 6 条」;②§2.5 新增四行组件:**分段控件(`.seg`/`.seg-item`)/表单字段(`.field`)/表格当前行(`.cell-name.is-on`)/两栏分栏**;③§六 新增一行实测「内联样式越权:八页全为 0」;④产物:`<style>` 里加 `.seg` / `.seg-item` / `.field` / `.cell-name.is-on` 四个组件;把**五处**分段控件(P2 分组 / P3 分区 / P5 账号多选 / P5 平台多选 / P5 版本 tab)从「`.btn btn-sm` + 内联 `border-color`」换成 `.seg-item.is-on`;把**四处**表格当前行从内联 `color` 换成 `.cell-name.is-on`;P7 三个数从 `.grid-cards` + 内联字号换成 `.home-stats`/`.stat-item`;P8 对账核对区表从宽松档 `.ds-table` 换成 `.tbl-side`;P6 与 P5 的表单字段从内联 `margin-bottom` 换成 `.field`;行级动作统一 `.btn-micro`(P2-06/07、P4-05/08、P2-09/10) | 用户 2026-10-08 口径「**参考 MCN 工作台的首页各个组件的样式,优化各功能页面首页组件样式**」。起因:全站选中态原有**三套画法**(侧栏浅紫底 / 分段控件内联描边变黑 / 表格当前行内联 accent 文字),字号也有内联覆盖 —— 都是「同一件事多个判定标准」,与用户长期口径冲突。新增的判据配了变异 **M15**(把 P2 分组改回内联写法 ⇒ 自检报红),证明它不是恒绿 | +| 学参照物的组件细节 + 语法门禁(2026-10-08 第六轮) | ①§2.5 新增两行组件(**图标(唯一出口 `navSvg`)/问答区 `.qa-block`**),并把「功能入口卡」那一行重写(补 **22px 图标 + 网格 200px + hover 阴影**);②产物:①**功能入口卡补图标** —— 17 张卡全部改成「22px 图标 + 标题」一行(图标=目标页自己的图标,复用侧栏那 8 个),图标线宽由 1.7 **改 2**(侧栏同步),网格最小宽 180→**200**,hover 补轻阴影;②P1 问答区加**虚线分隔**(`.qa-block`);③`≤640px` 补功能入口卡的紧凑档(内衬 `8/12`、图标 `18px`、最小宽 `160px`、隐小标);④**新增第 5 个门禁 `_tools/check_js.py`**(抠 `<script>` 跑 `node --check` + 多行扫描模板里 HTML 注释中的反引号) | 用户 2026-10-08 口径「**MCN 工作台里面每个组件的样式 高度 ICON 都是需要学习的,比如功能入口,感觉没有学到细节**」。逐件量的原值与我方差距(含**刻意不学**的 3 条与理由)落在 `3d-审查报告.md` §十一。⚠️ 新增门禁的起因:**「模板里的 HTML 注释带反引号」这个坑踩了第 4 次**(每次都在浏览器里才炸、`node --check` 整份 html 报不出来),已做成脚本并做了变异对照(注入反引号 ⇒ 报 FAIL 2 项、退出码 1) | +| 功能入口卡按参照物改三段纵向 + 密度还账 + 取证通道改造(2026-10-08 第七轮) | ①§2.5「功能入口卡」那一行重写(**三段纵向**:图标独占一行/内衬 `16/16`/段间距 `6px`/标题 `18px`/描述 `14px`/卡阴影 L1,卡高 66 → **111px**),新增「功能入口那一行(`.sect-nav`)」一行(**无小标**);②§2.5 统计条那行补 `margin-bottom:6px`、图标那行补 `≤640` 的 16px;③§1① ⑤ 收口形态注明「⛔ 不带小标」;④§五 第 6 条**作废**(390×844 已可测,见下)、第 7 条**第七轮整表替换**(11 个视口,并改正上一版把 768 记成 7 行的错数);⑤§六 功能入口卡与整页尺寸全部按 1440 实测回填;⑥产物:①`.data-card` 改三段纵向 + `.dc-line` 整块删除;②删掉八页的「功能入口」小标;③`.home-stats` 下边距 `8→6` 并**去掉七处内联 `margin-bottom`**(收进基类)、`.sect-nav` 七处内联同样收进基类、`.block-head` 下边距 `12→8`;④`≤640` 紧凑档收紧(内衬 `6/8`、图标 16、标题 16、`.block` 上边距 24);⑤**`_tools/cap.py` 改走 CDP `Emulation.setDeviceMetricsOverride`** —— 不再自起 headless Chrome,改连 9223 上已有的常驻实例,视口由声明式给定(顺带解除 500px 宽度下限,390×844 现已可测);⑥新增 `_tools/measure.py`(几何真值),⚠️ 写完后按其所属规则**已删除**(它自己起 Chrome,与⑤冲突) | 用户 2026-10-08 口径「**功能入口的高度还是没有 参考 MCN 的首页的功能入口 按钮的样式和布局**」+ 反过来点破取证方式「**为什么要重新开浏览器,先检查之前是否开过浏览能否复用**」,并要求把这条写进 `browser-harness` 技能(已写入其「🔴 本机(用户明令)」段)。⚠️ 这一轮最该记的是**顺序**:先按参照物把卡改到位,再逐视口跑判据、发现 1440 由 6 行掉到 5 行,然后回参照物**逐值量**(`style.css:387-392` + `app.js:332-336`)确认卡高 133px vs 我方 68px、差在主因「排布」;还账时**先跑改前基线(`_scratch/base.html`)**,确认 768/700/560/500 那四处红是改前就有的,再逐条还、逐条量 | +| 左侧导航样式对齐 tiaoyue 源站(2026-10-08 第七轮追加) | ①§1① ⑤「侧栏形态」由「64px 图标栏、名字只走悬停」**改成实测口径**「64px 药丸浮栏 + 项 56×78 + 图标 24 在上、2 字短名在下且常驻」;②§1.1 ⑨ 的 `≤640` 行重写(药丸那一套整段还原成通栏横条);③§2.3 断点行与布局脚手架行「图标栏」→「药丸浮栏」;④§2.4 G-05 当前项由「浅紫底」改「中性填充 + 满墨」;⑤§2.5 把「侧栏导航项」一行拆成「侧栏(`.sidebar`)/侧栏导航项(`.nav-item`)」两行并逐值写清,导航提示那行的**内容**由「名字」改「该页说明」;⑥§六 侧栏实测值回填(药丸盒高 664px、项 56×78、图标 24);⑦产物:`.sidebar` 改药丸浮栏、`.nav-item` 改 56×78 药丸(内衬 16/段间距 6/圆角 54/图标 24/名字常驻/中性状态)、`NAV` 短名一律收到 2 字并新增 `desc`、提示改读 `desc`、`≤640` 档补还原规则;⑧全篇「图标栏」改「药丸浮栏」(⛔ 历史修订行里的旧称保留) | 用户 2026-10-08 口径「**左侧导航 样式可以参考 tiaoyue的左侧导航**」。⚠️ 这条**当时没做完**:第三轮只做了形态,而且是照 `library.json` 的**计数**猜的(包里既没有导航几何、`design-system.html` 里也 `app-sidebar` 0 处)⇒ 猜出来的「纯图标栏、名字只走提示」与源站实测**正好相反**。本轮回源站量为:栏 64px 药丸(圆角 100/内衬 3/淡底+淡描边/⛔ 无右边线)、项 56×78 药丸、**图标 24 + 2 字短名都常驻**、当前项=中性填充+满墨、项间无 gap。逐条对照表在 `3d` §十三 | +| A 方案收密度 + 规则侧整改(2026-10-08 第八轮) | ①§1.1 ⑨ 断点表**整表校正**(原表 `901–1024` 与 `901–1000` **区间重叠**,已按代码实际断点拆成 `>1024` / `1001–1024` / `901–1000` / `821–900` / `641–820` / `≤640` 六档不重叠),并补上第八轮新加的两条:`≤1000` 卡最小宽 160px、`≤820` 统计条最小宽 96px;②§五 第 7 条密度表**第八轮整表替换**(768/700/560 三处转绿,只剩 500×844);③§2.5 统计条与功能入口卡两行补最小宽分档;④产物:`≤1000` 卡最小宽 `200→160px`、`≤820` 统计条最小宽 `132→96px`、移动档标签条**藏掉 16px 横向滚动轨**(真缺陷);⑤**规则侧**(`layouts-tooling.md`/`stage-delivery/SKILL.md`/`execution-runbook.md` 三份,见 `复盘-为什么第一版做得很差.md` §七):§5.5.2 判据由「栏宽 240–280px」改成「名字常驻可读」的实质判据、新增 §4.9 导航栏一档、§1 密度契约补适用范围与优先级、新增 §5.6 两条元规则、供给块补「定调与令牌的能力边界」与「craft 无供给时怎么办」、Gate-3 与完成标准补「视觉评分必须落盘」「人工项必须给机检或写死无机检」 | 用户 2026-10-08 三条口径:「1、不光是保持现状,要增加 agent 主导航规则,或优化现有规则」「2、A 方案」「不光是复盘,起反作用的规则要优化或清理」。⚠️ 顺带修掉全局技能包里**三条既有 FAIL**(不是本轮引入):停线规则的**权威写成了 `None`**(=连权威处也不许写,与本条自己的 `why` 矛盾)⇒ 改成 `SKILL.md` 并把规则补进「执行规则」;`stage-proto-doc` 与 `usage-scenario` 两处仍写①段**已废的 `strategy/` 路径** ⇒ 改成 `research/1d-产品策略.md` / `research/1e-使用场景.md` | + +--- + +## 八、说人话自评(判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 9 | 每节开口就是结论或数值,没有铺垫段 | +| 节奏 | 8 | 以表格与短断言为主,句式偏单一 —— ⚠️ 这是本份的弱项 | +| 信任度 | 9 | 不下「已通过」这种模糊话,未清零的直接写未清零 | +| 真实性 | 10 | 通篇是具体数(161px→53px、530px/5 行)、具体文件、具体命令,没有一句万金油 | +| 精炼度 | 9 | 已按「同一事实只写一处」裁过一轮(密度逐视口表只在 §五 第 7 条出现) | +| **总分** | **45 / 50** | 门槛 ≥45,压线过。扣分点如实写在第 2、5 行,⛔ 不报「已过」了事 | + +*(本份是原型的绑定规范:原型只许引本份登记的 token。)* diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fa6e07.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fa6e07.md new file mode 100644 index 0000000..d389d65 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fa6e07.md @@ -0,0 +1,453 @@ +# MCN 短视频整合营销工作台 · DESIGN.md(V4 · 八条口径落进②段两份与原型) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3a 子步产出 +> 本版是**第 6 步(把用户 2026-10-09~10-10 的八条口径落进②段两份与原型)**的绑定规范。⛔ 不是给 V3 打补丁,是按②段 V4 重出一版。 +> 落点:`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/ui/DESIGN.md`(目标目录内;⛔ 未写域外 `docs/pm/`)。 +> 判据源:`product-planning/references/stage-delivery/SKILL.md`(含 §供给 / Gate-1)+ `references/execution-runbook.md` §2 + `references/layouts-tooling.md` §5.5。 +> V4 的口径原文:`执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/用户口径裁决-5条回应.md`(2026-10-09)+ `执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a07/用户口径追加-账号是两个概念.md`(2026-10-10)。 +> 上一版原型只读对照:`执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/`(V3 原型与 `DESIGN.md`)。本版沿用其令牌与组件,⛔ 不覆盖 V3 文件。 + +--- + +## 〇、开工声明(声明制,四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3a 视觉规范(D0 锚需求 → D1 定调 → Gate-1)→ 3b 原型 | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据)。挡位 **标准** | +| 依据文件 | `stage-delivery/SKILL.md` §供给 + §3a/§3b;`execution-runbook.md` §2;`layouts-tooling.md` §0/§1/§5.5;②段 `2a-产品功能-新版.md`/`2b-界面布局-新版.md` | +| 产出落点 | `ui/DESIGN.md`(本份)、`ui/mcn-workbench.html`(3b)、`ui/_tools/`、`ui/_gate_shots/` | + +### 供给核对(runbook §2.0 · 步 −1,每轮必做) + +| 步 | 动作 | 结果 | +|---|---|---| +| −1 | 确认 §供给 三处在位 | ✅ `references/layouts-tooling.md`、`references/execution-runbook.md` 都在位;定调与令牌档在位 1 套 `assets/design-systems/design-system-tiaoyue/` | +| −1b | 套名与上一版记录比对 | ✅ 上一版 `DESIGN.md` 选定 `design-system-tiaoyue`,本版**沿用同一套**(用户 2026-10-07 令「每次设计只选一套」)⇒ 不触发变更清单 | +| −1c | 可选档是否动用 | ⛔ **未动用** `assets/open-design/`(随后续口径可选)。它独有的四项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)**本次无逐项数值供给来源** —— 见 §五 缺口 1,⛔ 没有凭感觉编一套顶上 | + +### V4 本轮改了什么(六条 · 骨架与令牌一格未动) + +1. **P2 选题库**:分组控件加一层**类型**维度(选题/对标线索/评论洞察/数据异动/灵感),与**进度**(待做/在写/已用)正交;选题行多一列「类型」。⛔ 不新增「待整理」状态。 +2. **P2 去掉「灵感速记」板块**(骨架 5 → 4 块):随手记本来就是全局可达的框架层入口(顶栏 `G-06`),写进来的东西落选题库。🔴 顺带订正 V3 遗留的一处文档打架(见 §五 缺口 8)。 +3. **P3 资产库**:页面职责由「存拆解结果」改成「**统一管理**」;入库不限页(P2 拆解结果可就地入库)。骨架仍 4 块。 +4. **P4 版本管理**:展开单位由「账号 × 平台」改成「**平台账号**」(一个平台账号一版)。 +5. **P5 目标选择改成两级**:先选内容账号,再勾它下面的平台账号(渠道);数据摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」;各版本块写死「**一个平台账号一版**(一版一路)」。 +6. **P6**:画像六维收成**画像五维**(去掉「平台」这一维),**新增「平台账号」板块**(骨架 4 → 5 块):平台账号=发布渠道,每条带「平台 + 登录态 + 授权状态」,是内容账号下的子项(1 → N)。🔴 页面数、导航、流转 20 条**都不动**;业务板块总数仍是 **39**(P2 −1、P6 +1)。 + +### 页型判定(硬前置,SKILL.md §3b) + +**全部 7 页都是工具型页面。** 依据:用户是天天来干活的 MCN 团队,每页都有人在里面完成一件事(决定先处理哪件 / 挑一条选题 / 存一条拆解 / 推一个环节 / 确认一次发布 / 改一份画像 / 写一条归因并核一条记录);没有一页是让人「看一眼就下决心」。 +⇒ 本份零 `.eyebrow`、零 `.lead`、零 `.hero`,且 `body.is-marketing` 之外的类名一个不设。与②段 `2b` §二「本产品是工具型页面,不是营销页」一致。 + +--- + +## 一、设计契约(十二个字段) + +### 1.1 项目级字段 + +**① 主用户**:MCN 机构的内容负责人(矩阵级决策)、编导与文案(选题与创作)、剪辑与投放(版本与发布)。依据①段 `1c-用户画像.md`(零访谈画像 —— 局限已登记在旧版 §四缺口 4,本版沿用)。 + +**② 主操作**:**逐页唯一**,照②段 `2b` §五 各页「主操作」原样落,本段未改一个(逐页见 1.2)。 + +**③ 必要内容(核对面)**:②段信息分档表逐页核对,见 1.2。只做**落位核对**(主屏常驻=零点击可见,可点入=一次点击可达),⛔ 不以它为由增删档位。 + +**④ 重复项的信息量**:四个主列表(账号矩阵 / 对标内容 / 资产条目 / 发布记录)是**满宽表格**,每行除「主标识 + 动作」外都带次级信息,逐页列在 1.2。 + +**⑤ 结构骨架(翻译面)**: + +- **骨架档:主区 + 侧区**。理由:一级导航覆盖 7 个目的地、宽屏 ≥1024;选定套的外壳本身就是「侧栏 + 主区」的应用型外壳,两者同构。 +- **导航层级:一层七项**(2026-10-09 按用户口径与 `2b` V3 §三 重做)。V2 做的是「3 个业务组 + 1 个跨组入口」,本版**把层级整个压平**: + - 七项按用户给的先后:**首页(P1)/选题(P2)/创作(P4)/投放(P5)/复盘(P7)/账号(P6)/资产(P3,排最后)**。 + - ⛔ **零组标、⛔ 零跨组分隔线、⛔ 零第二层**。V2 的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组线连同对应 CSS 一起删掉。 + - 项名**逐字取用户口径**(首页/选题/创作/投放/复盘/账号/资产);页面自己的名字不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。最要紧的一处:**导航叫「投放」,页面仍叫「发布中心」** —— 这一页只管内容发布与排期,⛔ 没有扩功能。 + - 「资产排最后」是硬约束(用户明说);其余六项照用户给的先后。 + - ⚠️ V2 遗留的「组名与短名怎么对应」这项待确认随之作废(组没了);**新冒出一个问号**:七项是否要另配一套两字短名 —— 现已按用户口径直接用全名,⛔ 本段没替用户起短名。 +- **侧栏形态:圆角浮栏,宽 `128px`**(V3 由 `184px` 收窄,相对 V2 是一处**显式改动**): + - 收窄的理由:V2 把栏做到 `184px`,唯一理由是「要容下**组名**一行」;组名按用户口径撤掉之后,这条理由消失,`184px` 就成了没人认领的余量,主区白白少 `56px`。 + - 宽度按「最长项名(2 字)+ 计数徽章 + 一指宽余量」定:内容宽 `128 − 16 − 2 = 110px` ≥ 项内容 `96px`(项内衬 `16` + 图标 `20` + 间距 `8` + 名 `28` + 间距 `8` + 徽章 `16`)。 + - 保住选定套的**圆角浮栏**性格(圆角 `24px`、淡底、`1px` 淡描边、四周留白、随内容高、在列内垂直居中);⛔ 没有引入第二套配色或第二套圆角 —— 令牌全部来自 `design-system-tiaoyue`。 + - 品牌名在 `128px` 里放不下(顶栏已写全称)⇒ **侧栏只留标记并居中**,`.sidebar .brand-name` 隐藏。 + - ⚠️ **几何不在样式库内**(§供给 明写「自带样式库实测只到调色板级」)⇒ 栏宽是③段的判断,不是从包里抄的。备选:保 `184px`(列更空)、或压到 `64px`(须把项改成「图标在上、名字在下」)⇒ 改**一处** `--nav-w` 即可推翻(见 §七 修订记录)。 +- **每页收口形态(七页统一)**:`页面公共框架(Page Shell)` → `业务板块若干(从上到下)`。⛔ 本版继续**不要**上一版那层「功能入口卡」(`.sect-nav` / `.data-cards` / `.data-card`):`2b` §一第 2 条与 §九第 2 条明令撤掉,它的文字本来就是流转表的副本。跨页入口只留在两处:**侧栏**(七页一次点击可达)与**业务板块内的行级动作**(流转表就落在那里)。 +- **密度目标:密集(8–32)**。理由:7 页都是一屏要放多行记录的工具型页面,`2b` P1 要求矩阵与今日待办**同时**常驻,宽松档放不下。同一页面只取这一档。 +- 块间距 ≥ 块内间距的 2 倍:块间 `32px`、块内 `8/12/16px` ⇒ 比值 2.0–4.0 ✅。 + +**⑥ 交互清单**:见 §二 表 2.4(逐元素四列)。**它是唯一的交互真相源** —— 3b 实测、自检、变异对照都引这一张,⛔ 不另建一份。 + +**⑦ 状态覆盖六项**:见 1.3,逐页逐项有结论。 + +**⑧ 组件来源**:优先沿用选定套既有组件族,其次自创。⛔ 未参考 `teamOnly: true` 的族。清单见 §二 表 2.5。 + +**⑨ 响应式行为**: + +| 断点 | 布局怎么变 | +|---|---| +| `>1024` | 侧栏 `128px` 圆角浮栏常驻(⛔ 宽度不随断点变)+ 主区 `minmax(0,1fr)` | +| `1001–1024` | 侧栏仍 `128px`;两栏分栏与满宽表格都不变;顶栏间距收到 `8px`;顶栏不折行 | +| `901–1000` | 同上,另:统计条最小宽 `132 → 96px`(4 格不折行) | +| `821–900` | 上述继续;另:两栏分栏 `.grid-main-side` → 单列(右栏被挤到 300px 以下就会折行) | +| `641–820` | 上述继续;另:统计条、表格列宽由 `auto` 收窄,主区内衬 `32 → 16px` | +| `≤640` | 侧栏**变成页头下方一条可横向滚动的标签条**(⛔ 不隐藏);项高 `36px`;主区单列 | + +**滚动容器**:整页不滚、**只有主区 `.view` 滚**。高度链三件套必须齐:`.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`。少写一处 ⇒ 整页「滚不动」而不是「不滚」(上一版踩过并留档)。**判滚动四个容器都要核**:`window`/`html`/`body`/`.view`。 + +**⑩ 明确拒绝的模式**(≥3 条,每条可判定): + +1、⛔ 不出现「眉标/大标题/灰色副标题」三段式标题区(判据:DOM 里 `.eyebrow` / `.lead` / `.hero` 三个类名出现次数为 0)。 +2、⛔ 不用围合边框假装分组(判据:非控件元素里 `border` + `border-radius` 同时出现在同一「分组」用途上 ≥3 次即判不过;结构性容器靠底色差 + 多层阴影分层)。 +3、⛔ 不给列表行套框、不给状态上整行底色(判据:行间只用 `border-top`;状态只出现在 `tag` 内)。 +4、⛔ 不做**逐区块**入场编排(判据:`@keyframes` 至多 1 处;过渡只用 `transition`,⛔ 不用 `linear` / `ease`)。 +5、⛔ 不可点的东西不长成可点样子(判据:页面里所有 `button` / `[role=button]` / `.btn*` 集合与 §二 表 2.4 的元素列做双向差集,差集为空)。 +6、⛔ **不用内联样式表达「选中态」或覆盖「字号」**(判据:七页里 `[style*=border-color]`、`[style*=color]`、`[style*=font-size]` 的出现次数**都为 0**)。选中态全站**只有一套画法**:`.is-on` / `.is-active`(整块浅紫底 + `--accent-text` + 字重 600);字号只许走 `--fs-*` 七档。 +7、⛔ **页面公共框架不许进板块计数、不许参与功能归属、不许占对象冻结计数**(判据:`.block` 数逐页等于 `FROZEN`;`.page-shell` 自身不带 `.block` / 不带 `.block-head h2`)。 +8、⛔ **辅助入口区不许把流转表再写一遍**(判据:每页 `.shell-aux` 里的 `[data-page]` 元素 ≤1 个)。 + +**⑪ 验收标准(可观察可判定)**: + +- 七页各自可达(`#/p/p1` … `#/p/p7` 直接打开都渲染出该页内容,不是空壳)。 +- 表 2.4 每一行的「触发 → 反馈」都真发生过,无死按钮。 +- 六态在每一页都能被看到(正常 / 加载 / 空 / 错误 / 禁用 / 无权限)。 +- 宽视口 `1440×900` 与窄视口各留截图,横向溢出为 0。 +- 页面上每个可点元素都能在表 2.4 里查到;表里没有的可点元素为 0。 + +**⑫ 明确拒绝的「编造」**:界面上不出现「示例 / 示意图 / 未接入 / 待核实」这类制作说明;也不把机器结论说成人已认可(如把「疑似原因」写成「已确认原因」)。 + +### 1.2 逐页字段(页面职责 / 主操作 / 必要内容落位 / 重复项信息量) + +| 页 | 页面职责 | 主操作(唯一) | 必要内容的落位核对 | 重复项的次级信息 | +|---|---|---|---|---| +| P1 矩阵总览 | 让内容负责人在 1 分钟内决定**今天先处理哪一件** | 挑一件待办并进到那一件事 | 账号矩阵、今日待处理=零点击可见;异常值、本月最好、全局检索=一次点击可达 | 账号行=账号名 + 今日该发/已发/效果 + 异动标 | +| P2 选题雷达 | 让编导在 3 分钟内**找到一条能做的选题** | 把一条选题推进下一步 | 对标监控概览、对标内容、选题库=零点击可见;评论区洞察=一次点击可达;随手记=全局可达(框架层,⛔ 不占板块) | 对标行=标题 + 账号 + 倍数 + 时间;选题行=选题 + 类型 + 来源 + 状态 | +| P3 资产库 | 让编导在 2 分钟内**把资产条目管到位、或引用一条去创作**(⛔ 入库不限页,本页是统一管理的地方) | 管好一条 / 引用一条 | 分区切换、资产条目=零点击可见;单条详情、引用入口=一次点击可达 | 条目行=条目摘要 + 出处 + 草稿/已入库 + 采集时间 | +| P4 创作台 | 让编导在一条内容上**把当前环节推到下一环节** | 推进到下一环节 | 创作流程、当前环节工作区、AI 产出与采纳、当前内容上下文=零点击可见;资产引用、版本管理、录制卡片与画板=一次点击可达 | 版本行=vN + 语义名 + 时间 + 当前标记 | +| P5 发布中心 | 让投放**确认发出这一批版本** | 确认发布 | 检查结果、各版本与逐版编辑、确认发布=零点击可见;目标选择、发布记录=一次点击可达 | 版本行=内容账号·平台账号 + 字数 + 检查结论(一版一路) | +| P6 账号画像 | 让内容负责人**改好并保存一个内容账号的画像**,并管好它下面的平台账号(渠道) | 保存这一份画像 | 画像五维、账号列表=零点击可见;平台账号、记忆条目、关联内容=一次点击可达 | 账号行=账号名 + 平台账号数 + 内容数;平台账号行=平台 + 登录态 + 授权状态;记忆行=日期 + 来源 + 一句话 | +| P7 复盘台 | 让内容负责人**确认归因并写回这个账号**,顺带**核销一条发布记录** | 确认归因并回写 / 核销一条记录 | 表现数据、归因结论、确认与改判、待复盘项、回写目标提示、发布记录、对账核对区=零点击可见;历史复盘、单条溯源、商单与收支=一次点击可达 | 待复盘行=内容 + 发布账号 + 发布日 + 数据到没到;记录行=内容 + 确认人 + 时间 + 版本 + 状态 | + +### 1.3 状态覆盖六项(逐页给结论) + +判据源:`SKILL.md` 铁律 2 的六态清单。⚠️ 逐项**数值判据**出自供给可选档 `craft/state-coverage.md`,本轮未动用可选档 ⇒ **该项本次无供给来源**,故只给「有没有、长什么样」的结论,不编阈值。 + +| 页 | loading | empty | error | success | disabled | 无权限 | +|---|---|---|---|---|---|---| +| P1 | ✅ 矩阵数据加载中(骨架行) | ✅ 还没接入账号(给「去账号画像建第一个账号」) | ✅ 数据源不可用(显时间戳 + 重试) | ✅ 默认态 | ✅ 无可处理项时待办区禁用并说明 | ✅ 非管理员看利润字段时的遮罩说明 | +| P2 | ✅ 拉取对标中 | ✅ 监控名单为空(给「录一个对标号」) | ✅ 拉取失败(退路=手工录入) | ✅ 默认态 | ✅ 未选账号时「转入创作」禁用 | ✅ —(不适用:本页对所有角色开放) | +| P3 | ✅ 条目加载中 | ✅ 该分区还没有条目(给「去拆解一条」) | ✅ 读取失败(重试) | ✅ 默认态 | ✅ 无出处条目「入库」禁用(门禁) | ✅ —(不适用) | +| P4 | ✅ 环节生成中 | ✅ 该环节还没产出(给「开始这一步」) | ✅ 本步失败(保留已产出 + 重试该步) | ✅ 默认态 | ✅ 文案与封面缺一,「进检查态」禁用(封面缺只提示;F6 守卫) | ✅ —(不适用) | +| P5 | ✅ 检查中 | ✅ 还没有可发布的版本(回 P4) | ✅ 检查自身失败 ⇒ **按不过处理**(fail-closed) | ✅ 无硬拦、可发 | ✅ 有硬拦项时「确认发布」禁用 | ✅ 未授权账号的版本标「无发布权限」并禁用该版 | +| P6 | ✅ 画像加载中 | ✅ 还没有画像(给「建画像」) | ✅ 保存失败(保留编辑内容) | ✅ 保存成功提示 | ✅ 只读角色时字段禁用 | ✅ 非本人负责账号:可看不可改 | +| P7 | ✅ 读数据中 | ✅ 还没有可复盘的内容 | ✅ 数据读不到 ⇒ 转手工录入表现 | ✅ 回写成功提示 | ✅ **未确认归因(`confirmed` 未置)时「回写」禁用**(F10 前置开关) | ✅ —(不适用) | +| P7 后半(原 P8) | ✅ 记录加载中 | ✅ 还没有发布记录 | ✅ 读取失败(重试) | ✅ 核销成功 | ✅ 未选中记录时「核销」禁用 | ✅ 利润列对非管理员隐藏(列级遮罩) | + +> 口径:`disabled` 与 `无权限` 是两件事 —— 前者是「当前条件不满足」(自己能解开),后者是「角色不允许」(自己解不开)。界面文案分开写,⛔ 不拿「不可用」一句话糊过去。 +> 🔴 V4 追加:P6 的「平台账号」块**逐行**给「登录态 + 授权状态」(状态标),未登录/未授权时行内动作改成「去登录」。它落在六态的 `disabled` 里(条件未满足、自己能解开),⛔ 不新造第七种态。 + +--- + +## 二、令牌表 + +### 2.1 三层结构(`primitive → semantic → component`) + +组件层只引语义层,语义层只引 primitive;⛔ 无孤立 token。 + +### 2.2 色值(来源=选定套 `design-system-tiaoyue` 亮色基线 · 9 页 clipper 实测) + +| 语义 token | 值 | 用途 | +|---|---|---| +| `--paper` | `#faf9f5` | 页面底(暖白纸感) | +| `--surface` | `#ffffff` | 面板 / 卡片底 | +| `--surface-soft` | `#f7f6f1` | 次级面(表头、只读块、侧栏组标底) | +| `--ink` | `#1a1a18` | 主文字 | +| `--ink-mute` | `#57564f` | 次级文字 | +| `--ink-faint` | `#8a887f` | 三级文字 / 占位 / 组标(⛔ 只用于非正文) | +| `--line` | `#e7e5dc` | 分隔线(行间 `border-top`) | +| `--line-soft` | `#efeee7` | 更弱的分隔(块内) | +| `--accent` | `#9E4CFF` | 主强调色(品牌紫) | +| `--accent-text` | `#963dff` | accent 当**文字**时用这一档 | +| `--on-accent` | `#FFFFFF` | 主色上的文字 | +| `--ok` | `#3d7a4f` | 成功态 | +| `--err` | `#b4453a` | 错误态 | +| `--warn` | `#8a5a00` | 提醒 / 异常值 / 软劝。**本项目追加**:选定套亮色基线没有 warn 档,而②段 P5 要求「硬的拦住、软的只提醒」要有两种可见区分 ⇒ 新增一档并登记实测对比度 | + +**强调色允许位置**:① 主按钮填充底;② 侧栏当前项与分段控件选中项的**整块浅底**;③ 链接文字(用 `--accent-text`);④ 焦点环。⛔ 不允许出现在页面大背景、卡片底、图标填充(除主按钮内图标)、任何渐变。全屏面积 ≤5%。 + +**禁止**:⛔ 无紫→粉渐变;⛔ 无装饰性发光;⛔ 状态色只用红/绿/黄三系,不做装饰。 + +### 2.3 几何 · 字体 · 间距 · 字阶 · 高度层级 · 脚手架 + +| 项 | 值 | 来源 / 说明 | +|---|---|---| +| 字体 | `"PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans SC", sans-serif` | 选定套实测:源站 `@font-face` 为 0 条,走系统字体栈 | +| 标题字体(展示体) | `"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走黑体栈);字重 ≤600 | 沿用上一版方案 A:宋体标题 + 黑体正文=两族对照,符合「字族 ≤2–3」。⛔ 未用 Inter / Roboto / `system-ui` 关键字 | +| 等宽数字 | `font-variant-numeric: tabular-nums` | 所有数字列,防刷新抖动 | +| 圆角 | 大容器 `24px`/面板 `16px`/行与小件 `14px`/输入框 `9px`/按钮 `26px`(药丸) | 全部取自选定套 | +| 间距 · 主刻度 | `4 / 8 / 16 / 24 / 32 / 64` | 供布局。块间用 32,块内 8/12/16 | +| 间距 · 微网格 | `2 / 4 / 6 / 8 / 12` | **仅供**按钮内衬、徽章内衬、图标间隙 | +| 块间距 / 块内间距 | 32 / 8–16 ⇒ 比值 2.0–4.0 | 判据要求 ≥2 ✅ | +| 字阶定值表(七档) | `--fs-12` 12 / `--fs-14` 14 / `--fs-16` 16 / `--fs-18` 18 / `--fs-20` 20 / `--fs-24` 24 / `--fs-30` 30 | 相邻差 2/2/2/2/4/6 全部 ≥2 ✅;每档只一个定值 | +| 高度层级(每层多层叠层) | L1(行/内嵌):`0 1px 1px rgba(26,26,24,.03), 0 2px 6px -2px rgba(26,26,24,.06)`<br>L2(面板):`0 1px 2px rgba(26,26,24,.04), 0 8px 20px -12px rgba(26,26,24,.14), 0 18px 40px -18px rgba(26,26,24,.10)`<br>L3(浮层):`0 2px 4px rgba(26,26,24,.05), 0 14px 32px -12px rgba(26,26,24,.18), 0 32px 64px -24px rgba(26,26,24,.16)` | 每层 ≥2 层叠层 ✅ | +| 布局脚手架 | 侧栏 `128px` 圆角浮栏(随内容高、列内垂直居中)+ 主区 `minmax(0,1fr)`;主数据块走满宽表格(`.ds-table.tbl-dense`);两栏分栏 `.grid-main-side` 宽比 `1.35fr : .9fr` | 骨架档=主区+侧区,已落到具体列宽 | +| 容器与对齐锚点 | 主区左右内衬 `32px`;表格与块标题左锚点同一条线;数字列右对齐且右锚点对齐块右内衬 | 判据要求「对齐锚点」写明 | +| 浮层 | 居中面板,宽 `min(560px, calc(100vw - 32px))`,内衬 `24px`;**只有一个可见关闭出口**(右上 ×);遮罩与 `Esc` 也可关,但不计为可见出口 | 满足 Gate-3「可见关闭出口唯一」 | + +### 2.4 交互清单(唯一交互真相源 · 四列) + +**通用规则**(适用于下面所有浮层):每个浮层**只有一个可见关闭出口**(右上 ×,ID `X-close`);遮罩点击(`X-mask`)与 `Esc` 也能关,但**不视为可见出口**;关闭后焦点回到触发它的那个按钮,Tab 只在层内循环。下表不逐浮层重复这三条。 + +| ID | 元素 | 触发 | 反馈 | 何时不可点 | +|---|---|---|---|---| +| G-05 | 侧栏七个功能项(一层七项,一项一页;⛔ 无组标、⛔ 无第二层) | 点击 | 切到该页(hash 变、主区重绘);当前项转整块浅紫底 + `--accent-text` + 600 | 从不可点 | +| G-06 | 顶栏「随手记」 | 点击 | 打开随手记浮层,焦点进输入框 | 从不可点 | +| G-08 | 两处「假设」徽章(P1 页头 / P7「商单与收支」块头) | 点击 | 打开假设浮层(逐条给复核人 / 时机 / 落点) | 从不可点 | +| X-close | 各浮层右上 × | 点击 | 关闭浮层;焦点回触发它的按钮 | 从不可点 | +| X-mask | 浮层遮罩(层外空白区) | 点击 | 关闭浮层;焦点回触发它的按钮 | 没有浮层时不渲染 | +| SP-01…SP-07 | 各页**页面操作区**的页面级操作(刷新本页数据) | 点击 | 提示「已刷新本页数据」;不改数据 | 从不可点 | +| STATE-NORMAL | 状态面板 ·「回到正常内容」 | 点击 | 该页回 `ok` 态,主操作恢复 | 仅在非 `ok` 态出现 | +| STATE-RETRY | 出错态 ·「重试一次」 | 点击 | 提示已重试(示意);不改数据 | 仅在 `error` 态出现 | +| STATE-GO | 空态 ·「去〈某页〉」 | 点击 | 跳到该页;面板关 | 仅在 `empty` 态且该页定义了去处时出现 | +| R-01 | 随手记浮层 · 输入框 | 输入 | 内容非空时「保存」由禁用转可用 | 从不可点(可输入) | +| R-02 | 随手记浮层 · 保存 | 点击 | 写入选题库「待做」;提示 1.5s 后消失;浮层关闭 | 输入为空时 `:disabled` | +| R-03 | 随手记浮层 · 取消 | 点击 | 关闭,不写入;焦点回触发按钮 | 从不可点 | +| A-01 | 假设浮层 · 两处假设条目 | 展示 | 只读,逐条给复核人 / 时机 / 落点 | 不适用(只读,非控件) | +| P1-01 | 今日待处理项(每条) | 点击 | 跳到该待办所属的页(选题类→P2、在写→P4、待审→P5、待复盘→P7、待核销→P7 的记录区) | 从不可点 | +| P1-02 | 账号矩阵行名 | 点击 | 跳到 P6 并选中该账号(传 `accountId`) | 从不可点 | +| P1-03 | 账号矩阵行 ·「看复盘」 | 点击 | 跳到 P7 并选中该账号的待复盘内容(传 `accountId`) | 该账号没有可复盘内容时禁用 | +| P1-04 | 异常值提示条目 | 点击 | 跳到 P2 并带 `filter=异常值` 定位(传 `benchmarkId`) | 无异常值时整块显示空态 | +| P1-05 | 本月最好的一条 | 点击 | 跳到 P7 的该条复盘 | 无数据时禁用 | +| P1-06 | 全局检索 · 输入框 | 输入 | 结果列表按关键字过滤;无结果显示空态行 | 从不可点(可输入) | +| P1-07 | 全局检索 · 结果项 | 点击 | 跳到该结果所属的页;关键字清空 | 无结果时不渲染可点项 | +| P2-01 | 监控概览 ·「低粉爆款」数 | 点击 | 筛选对标内容列表(只看爆款) | 数为 0 时禁用 | +| P2-02 | 监控概览 ·「异常值」数 | 点击 | 筛选对标内容列表(只看异常) | 数为 0 时禁用 | +| P2-03 | 对标内容行 ·「发起拆解」 | 点击 | 跳到 P3 并带 `benchmarkContentId`(预填原文与出处) | 从不可点 | +| P2-04 | 评论区洞察 · 展开/收起 | 点击 | 展开子区并开始抓取(显示抓取中) | 从不可点 | +| P2-05 | 评论区洞察 ·「抓取评论」 | 点击 | 进入抓取中 → 出候选选题列表 | 抓取中时禁用 | +| P2-06 | 候选选题 ·「采纳」 | 点击 | 该条进选题库「待做」;候选行标为已采纳 | 该条已采纳时禁用 | +| P2-07 | 候选选题 ·「忽略」 | 点击 | 候选行标为已忽略(可恢复) | 该条已忽略时禁用 | +| P2-08 | 选题库 · 进度 tab(待做/在写/已用) | 点击 | 列表切换成该进度组 | 从不可点 | +| P2-09 | 选题行 ·「转入创作」 | 点击 | 建/切当前 `Content` 并跳到 P4;选题转「在写」(流转 8) | 未选账号时禁用(行内说明) | +| P2-10 | 选题行 ·「拆解」 | 点击 | 跳到 P3 并把该选题当素材 | 从不可点 | +| P2-12 | 选题库 · 类型 tab(全部/选题/对标线索/评论洞察/数据异动/灵感) | 点击 | 列表按该类型过滤(与进度维度正交,两个维度的筛选同时生效) | 从不可点 | +| P2-AUX | 辅助入口区 ·「开始创作」 | 点击 | 跳到 P4(不带条目,落在当前内容上) | 从不可点 | +| P3-01 | 分区切换 tab(角度/结构/开场白/标题) | 点击 | 条目列表换成该分区 | 从不可点 | +| P3-02 | 条目行 | 点击 | 右区显示单条详情(原文 / 出处 / 草稿标记) | 从不可点 | +| P3-03 | 单条详情 ·「入库」 | 点击 | 无出处条目被门禁挡并说明原因;有出处的转「已入库」 | **无出处或原文缺失时禁用**(门禁) | +| P3-04 | 引用入口 ·「引用到创作台」 | 点击 | 跳到 P4 并把该条目加进资产引用区(流转 9) | 从不可点 | +| P4-01 | 创作流程 · 七个环节(逐项) | 点击 | 切到该环节;只许回退到已完成的环节 | 未到达的后续环节禁用 | +| P4-02 | 当前环节工作区 · 内容输入框 | 输入 | 「开始这一步」由禁用转可用 | 从不可点(可输入) | +| P4-03 | 当前环节工作区 ·「开始这一步」 | 点击 | 生成中 → 产出写进「AI 产出与采纳」(⛔ 不进正文) | 输入为空时禁用 | +| P4-04 | 资产引用 ·「从资产库拿一条」 | 点击 | 展开选择器;选中后收进引用区并显示来源 | 资产库为空时禁用并说明 | +| P4-05 | 资产引用 ·「移除引用」 | 点击 | 从引用区移除该条 | 引用区为空时不渲染 | +| P4-06 | 「推进到下一环节」 | 点击 | 当前环节 +1;流程与工作区跟着变 | 文案与封面缺一、进检查态时禁用(封面缺只提示;F6 守卫) | +| P4-07 | AI 产出与采纳 ·「采纳」 | 点击 | 机器产出并入本环节正文 | 无未裁决产出时禁用 | +| P4-08 | AI 产出与采纳 ·「驳回」 | 点击 | 正文不变;产出标为已驳回 | 无未裁决产出时禁用 | +| P4-09 | AI 产出与采纳 ·「改后再用」 | 点击 | 保留人的版本;产出标为改后再用 | 无未裁决产出时禁用 | +| P4-10 | AI 产出与采纳 ·「中断生成」 | 点击 | 停掉本步生成 | 仅在生成中出现 | +| P4-11 | 版本管理 ·「按平台账号展开」 | 点击 | 母版展开出多版本(每个版本绑一个**平台账号**,一个平台账号一版,F7) | 未到成稿态时禁用 | +| P4-12 | 版本管理 · 版本行「切为当前版」 | 点击 | 该版标为当前版;当前内容上下文的版本号跟着变(F8) | 该版已是当前版时禁用 | +| P4-13 | 录制卡片与画板 ·「生成卡片」 | 点击 | 成稿态生成一张卡片(F14) | 未到成稿态时禁用 | +| P4-14 | 录制卡片与画板 ·「同步到画板」 | 点击 | 卡片落到画板,可打开 | 还没有卡片时禁用 | +| P4-AUX | 辅助入口区 ·「查账号口径」 | 点击 | 跳到 P6 并选中当前账号(流转 11) | 从不可点 | +| PICK-ASSET | 资产选择器 · 单条 | 点击 | 收进引用区并显示来源;浮层关 | 已引用过的不渲染可点项 | +| P5-01 | 目标选择 · 展开/收起 | 点击 | 展开**两级**目标选择(内容账号 → 它下面的平台账号) | 从不可点 | +| P5-02 | 目标选择 · 内容账号项 | 点击 | 勾选/取消该内容账号;**连它下面的平台账号(渠道)一起增删**,版本列表跟着变 | 从不可点 | +| P5-03 | 目标选择 · 平台账号项(渠道) | 点击 | 勾选/取消一个平台账号;版本列表跟着增删一版(一版一路) | 从不可点 | +| P5-04 | 各版本 · 版本 tab(逐版) | 点击 | 右区换成该版内容 | 从不可点 | +| P5-05 | 版本内容编辑框 | 输入 | 「保存本版」由禁用转可用;标为「已改」 | 从不可点(可输入) | +| P5-06 | 版本内容 ·「保存本版」 | 点击 | 该版内容更新;检查结果跟着重算(回到未检) | 无改动时禁用 | +| P5-07 | 检查结果 ·「复检」 | 点击 | 检查中 → 出结论(硬拦 / 软劝 / 通过) | 检查中时禁用 | +| P5-08 | 「确认发布」 | 点击 | 打开二次确认浮层 | **有硬拦项时禁用**;无版本时禁用 | +| P5-09 | 二次确认 ·「确认发出」 | 点击 | 写发布记录(复盘页的记录区出现一条);提示成功(流转 14) | 从不可点 | +| P5-10 | 二次确认 ·「取消」 | 点击 | 关闭浮层,不发;焦点回触发按钮 | 从不可点 | +| P5-11 | 发布记录 · 记录行 | 点击 | 跳到 P7 并定位该记录 | 从不可点 | +| P6-01 | 账号列表项 | 点击 | 切换右区画像 | 从不可点 | +| P6-02 | 画像**五维**字段(定位/风格/受众/偏好与红线 + 长期记忆,共 5 个输入) | 输入 | 「保存画像」由禁用转可用 | 非本人负责账号时禁用(改由角色判定) | +| P6-03 | 「保存画像」 | 点击 | 保存成功提示;未保存时离开给提示 | 无改动时禁用 | +| P6-04 | 记忆条目 · 展开/收起 | 点击 | 展开记忆列表(只追加,不可编辑) | 从不可点 | +| P6-05 | 关联内容行 | 点击 | 跳到 P4 的该条内容 | 无关联内容时整块空态 | +| P6-06 | 平台账号行 ·「去登录/重新授权」 | 点击 | 该行登录态与授权状态一起转「已登录 · 已授权」 | 从不可点 | +| P6-07 | 平台账号 ·「加一个平台账号」 | 点击 | 该内容账号下多一个平台账号,初始「未登录 · 未授权」 | 从不可点 | +| P7-01 | 待复盘项 | 点击 | 右区换成该条的表现数据 | 从不可点 | +| P7-02 | 表现数据 ·「手工录入」 | 点击 | 数据读不到时的降级入口,展开输入 | 数据已读到时不渲染 | +| P7-03 | 归因结论 · 文本 | 输入 | 「采纳这条归因」由禁用转可用 | 从不可点(可输入) | +| P7-04 | 确认与改判 ·「采纳这条归因」 | 点击 | `confirmed` 置真 ⇒ 「确认归因并回写」转可用(**前置开关**) | 归因为空时禁用 | +| P7-05 | 确认与改判 ·「驳回」 | 点击 | 标为已驳回;回写按钮保持禁用 | 归因为空时禁用 | +| P7-06 | 确认与改判 ·「改后再用」 | 点击 | 标为改后再用;回写按钮保持禁用 | 归因为空时禁用 | +| P7-07 | 回写目标提示 ·「确认归因并回写」 | 点击 | 回写到当前账号画像:记忆 +1;显示回写目标(流转 17) | **未采纳归因(`confirmed` 为假)或未选账号时禁用** | +| P7-08 | 历史复盘 · 展开/收起 | 点击 | 展开历史复盘结论 | 从不可点 | +| P7-09 | 发布记录行 | 点击 | 右区换成该条的对账详情 | 从不可点 | +| P7-10 | 单条溯源 · 展开/收起 | 点击 | 展开溯源:从记录回到内容与版本 | 从不可点 | +| P7-11 | 对账核对区 ·「核销」 | 点击 | 二次确认 → 该条标「已核销」 | 未选记录时禁用;记录未「已发布」时禁用 | +| P7-12 | 商单与收支 · 展开/收起 | 点击 | 展开收支条目(F12 标 `P2/Deferred`) | 从不可点 | +| CHECKOUT-OK | 核销二次确认 ·「确认核销」 | 点击 | 该条标「已核销」;提示成功;浮层关 | 从不可点 | +| CHECKOUT-CANCEL | 核销二次确认 ·「取消」 | 点击 | 关闭浮层,不核销;焦点回触发按钮 | 从不可点 | + +⚠️ **「可见关闭出口」与「决策型关闭」是两件事**:每个浮层的中性关闭出口只有一颗 ×(`X-close`),恰好 1 个;「取消」这类带决策语义的按钮也能关层,但它不是「找出口」用的,**单独登记**(`R-03` / `P5-10` / `CHECKOUT-CANCEL`)。⛔ 不把两类混成一个数。 + +**表外可点元素必须为 0** —— 自检里有一条逐集合做双向差集的检查(`#/selftest` 自动跑)。 + +⚠️ **`A-01` 不是控件**:它是假设浮层里的只读展示行,列出来是为了「假设有两处、逐条给复核人/时机/落点」这件事在清单里看得见 ⇒ **不进实现清单**(原型里的 `IMPL` 表),自检也不拿它去点。 + +⚠️ **V1 撤销的 7 个 ID 与 V2 再撤 5 个**:V1 撤 `G-01…G-04`(一级组)/`G-07`(账号切换器)/`G-09`(演示开关)/`G-11`(收起侧栏)。V2 因「功能入口」那一层整体撤销,再撤 `card()` 相关的 `data-page` 用法;因「全局检索」从浮层改为 P1 的业务板块,撤掉检索浮层与其 `S-01`/`S-02`(改由 `P1-06`/`P1-07` 承担)。⛔ 撤销一个 ID 时必须同时把它的 DOM 删掉,否则判据「页面上每个 `data-act` 都在清单里」会报红。 + +⚠️ **V4 撤 1 个、新增 3 个**:V4 因「灵感速记」不再是 P2 的业务板块(随手记本就有全局入口 `G-06`,那个页内按钮是重复),撤 `P2-11`;新增 `P2-12`(选题库的**类型**维度 tab —— 选题库现在两个正交维度:进度 `P2-08` + 类型 `P2-12`)与 `P6-06`/`P6-07`(平台账号的登录授权与新增,对应 P6 新板块)。⛔ 三个新 ID 的 DOM 必须同时在页面上,否则判据「清单里每个 ID 都在页面上出现过」会报红。清单共 **90 个 ID**(V3 是 88)。 + +### 2.5 组件规格(来源:选定套既有组件族) + +| 组件 | 规格(具体值) | 来源 | +|---|---|---| +| 按钮 · 主档 | 高 `40px`,内衬 `12/20`,字号 `16px`,字重 `600`,圆角 `26px`,底 `--accent`,字 `--on-accent` | 选定套 `--btn-*`;字号 16 + 600 是**必须的**(`#FFFFFF` 压 `#9e4cff` 只有 4.26:1,须走大字线 3:1) | +| 按钮 · 次档 | 高 `40px`,内衬 `12/20`,字号 `14px`,字重 `500`,圆角 `26px`,底 `--surface`,描边 1px `--line`,字 `--ink` | 同族 | +| 按钮 · 弱档(文字) | 高 `32px`,内衬 `6/12`,字号 `14px`,圆角 `26px`,无底无描边,字 `--accent-text` | 同族 | +| 卡片 · 密卡 | 内衬 `16px`,圆角 `16px`,底 `--surface`,L1 阴影 | 同族 | +| 卡片 · 宽松卡 | 内衬 `24px`,圆角 `24px`,底 `--surface`,L2 阴影 | 同族 | +| 输入框 | 高 `36px`,内衬 `12/10`,圆角 `9px`,字号 `14px`,底 `--surface`,描边 1px `--line` | 同族 | +| 徽章 / 状态标 | 高 `22px`,内衬 `2/8`,字号 `12px`,圆角 `999px`,无描边,底为对应状态色 8% 叠加 | 同族 | +| 侧栏(`.sidebar`) | **圆角浮栏**:宽 `128px`、内衬 `8px`、圆角 `24px`、底色 `color-mix(in srgb, var(--ink) 5%, transparent)`、描边 `1px color-mix(in srgb, var(--ink) 12%, transparent)`;高度随内容、`align-self:center` 在 `128px` 列里垂直居中;品牌只留标记并居中(`.sidebar .brand-name` 隐藏) | 形态沿用选定套 `.app-sidebar`(圆角浮栏、淡底、淡描边);宽度按「最长项名 2 字 + 计数徽章 + 一指宽余量」定到 `128px`(V3 由 `184px` 收窄,理由见 §1.1 ⑤;几何不在样式库内) | +| 侧栏导航项(`.nav-item`) | 高 `40px`、内衬 `0/8`、圆角 `999px`、图标 `20px` + 名字 `14px/500`、图标与名字间距 `8px`;项间 `gap 2px`;hover 只换底色(`--tfast`),⛔ 不移位、⛔ 不加阴影 | 形态照选定套 `nav-item`(药丸、只换色);横排图标+名字,字号与全站正文同档(`14px`)。V3 把内衬由 `0/12` 收到 `0/8`,给 `128px` 栏让出宽度 | +| 侧栏当前项(`.nav-item.is-active`) | 整块浅紫底 `color-mix(in srgb, var(--accent) 10%, var(--paper))` + 字色 `--accent-text` + 字重 `600`(⛔ 不用单侧色条、⛔ 不用描边变黑) | 与 §1.1 ⑩ 第 6 条「选中态只有一套画法」一致 | +| 页面公共框架(`.page-shell` / `.page-shell-title` / `.page-shell-stats` / `.page-shell-ops` / `.page-shell-aux`) | 标题区:`h1` + 一行说明;统计区用 `.stat-item`(白底 + 1px `--line` + 圆角 `16px` + 内衬 `12/16`,值 `20px/600` + `tabular-nums`,标签 `12px` `--ink-mute`);操作区一行按钮靠右;辅助入口区最多一个入口。⛔ 这一层**不带 `.block` / 不带 `.block-head h2`** | 落 `2b` §四:它不算板块数、不参与功能归属、不占冻结计数 | +| 满宽表格(`.ds-table.tbl-dense`) | 容器 `.panel` + `.table-wrap`(`overflow-x:auto`);表头 `12px/600` `--ink-mute` + 下边框 1px `--line`;行内衬 `4/8`、行间 `border-top` 发丝线、单元格 `vertical-align:middle` + `nowrap` | 密度契约(一屏 ≥6 行)逼出来的紧凑档 | +| 栏内表(`.ds-table.tbl-side`) | 两栏**栏内**的列表:内衬同上,但 ⛔ **不套 `nowrap`** | 同上,只在窄栏里用 | +| 行级微按钮(`.btn-micro`) | 高 `22px`、内衬 `0/8`、字号 `12px`、圆角 `999px`、无底、字色 `--accent-text`、`:disabled` 时透明度 `.45`。⛔ 表格行里不许用 32px 的 `.btn-sm` | 同上 | +| 分段控件(`.seg` / `.seg-item`) | 容器 `gap 4px` + 可换行;项高 `32px`、内衬 `0/12`、圆角 `999px`、描边 1px `--line`、白底;选中项 `.is-on` =整块浅紫底 + `--accent-text` + 600 + 描边转 `--accent` | 选中态统一 | +| 表单字段(`.field`) | 字段块间距由 `.field + .field{ margin-top:16px }` 出 | 统一 | +| 表格当前行(`.cell-name.is-on`) | 当前行的行名转 `--accent-text`(选中态在表格里的落法,⛔ 不写内联 `color`) | 统一 | +| 两栏分栏(`.grid-main-side`) | 宽比 `1.35fr : .9fr`;左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列 | 沿用 | +| 图标(唯一出口 `navSvg(page,size)`) | `viewBox 24` / `fill:none` / `stroke:currentColor` / `stroke-width:2` / 圆头圆角;尺寸只有两个用法:侧栏 `20px`、`≤640px` 的 `16px`;颜色只有一处 `--accent-text`(当前项走 `currentColor`) | 沿用 | + +> 同屏主档按钮 ≤1(多步流程每步 ≤1):P1 无主档、P2/P3/P4/P5/P6/P7 各 1 个 ✅(P7 前后两半各有一个推进动作,但同屏只出当前上下文那一个) +> 实底底色 ≥2 种:主档 `--accent`、次档 `--surface`、状态标(ok/err/warn 三色 8% 叠加)✅ + +--- + +## 三、两处假设的显式标注(⛔ 不当已确认需求用) + +②段 `2b` §七 标了两处骨架受限(第 1 条 P1 形态 / 第 2 条 P7 第 10 板块「商单与收支」)。本轮**尚无用户结论** ⇒ 按②段给的默认读法做,并在本份与原型里显式标注: + +| # | 受影响处 | 假设内容 | 本轮默认读法 | 复核人 | 复核时机 | 结论落点 | +|---|---|---|---|---|---|---| +| 假设 1 | **P1 的形态** | 矩阵级视图是否真需要(1a 待复核第 5 条 + A1) | **按「需要矩阵级视图」做**:P1 = 矩阵总览,5 个板块全在。若复核为「不需要」,P1 降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换 | 主会话转用户 | ②段收口时一次性过 | `2b` §七 + §五 P1;本轮落 `ui/DESIGN.md` 本节 + 原型 P1 页头的「假设」徽章 | +| 假设 2 | **P7 后半段第 4 板块「商单与收支」**(原 P8 的第 4 板块) | 商单对账进不进第一版、收支口径是否内容级(1a 待复核第 6 条 + A3) | **按「进第一版但属 P2、可整块缺」做**:第 4 板块**渲染出来但标「可点入 + 假设」**,展开后给一句「本块依赖未复核项」。它前面那 3 块(发布记录/单条溯源/对账核对区)不受影响 | 主会话转用户 | 同上 | `2b` §七 + §五 P7;本轮落 `ui/DESIGN.md` 本节 + 原型 P7 后半段第 4 板块标题行的「假设」徽章 | + +**原型的兑现方式**:两处各在自己的**板块标题同行右侧**挂一个「假设」徽章,**徽章本身可点**(`G-08`)—— 点开后逐条给出复核人 / 时机 / 落点。⛔ 假设既没有被当已确认需求写死,也没有被编出答案。 + +--- + +## 四、Gate-1 方向门自检(硬闸,结果写在本份末尾) + +逐条结论在 §八(十七行,含本轮现取的实测依据);逐视口表在 §6.1。 + +--- + +## 五、缺口与证据边界(⛔ 不假装支持) + +1. **反 AI 味 / 无障碍 / 表单校验 / 动效纪律的逐项数值判据本次无供给来源** —— 这四项出自 §供给·工艺数值判据的**可选档**(`assets/open-design/craft/` 13 份),本轮未动用可选档 ⇒ ⛔ 不凭感觉编一套顶上。本段实际应用的是**默认档**判据:`execution-runbook.md` §3.3/§3.4 + `layouts-tooling.md` §5.5。 +2. **暗色主题本轮不做** —— 选定套的暗色与亮色是两套独立基线,规则是「要暗色就整套切」。⇒ 本轮只做亮色基线,⛔ 不与暗色混搭。 +3. **`--warn` 是本项目追加的第 14 个语义色** —— 选定套亮色基线只有 ok/err,无 warn;而②段 P5 要求软硬两种区分。追加值的对比度实测记在 §六。 +4. **`1c-用户画像.md` 是零访谈画像** —— 界面里凡涉及「角色能看什么」的判据都基于它,**不得对外说成基于用户调研**。 +5. **3c GPT 参考版本轮不做** —— 派活单明令「⛔ 不许再向外发送本项目内容」(第②棒曾把产品现状发到站外,属红线动作)⇒ 本轮**全部输入只看本地文件**,⛔ 不上传、不外发、不用站外模型服务。⇒ `3c` 的「让外部模型独立出一版」这一步本轮**按红线停做**,并在收尾明示「未取得参考版 ≠ 已通过」。这是**红线优先于流程**的处置,不是漏做。 +6. **窄视口实测下限与红档** —— 本轮取证走 CDP 声明式视口(`Emulation.setDeviceMetricsOverride`),实测到 `390×844`;逐视口表(§6.1)现含 `390×844` 一档,⛔ 不写「已测 375」这种没测过的。⚠️ **16 档里有 3 档不达标**:`560×900`(P1 5 行)、`500×844`(P1 3 行)、`390×844`(P1 0 行 + P2 5 行)。🔴 **V3 把侧栏由 `184px` 收窄到 `128px` 之后,这三档一格没变** —— 实测 P1 首行顶逐档与 V2 **完全相同**(`669 / 729 / 822px`),说明红来自「Page Shell 一层抬高了 P1 首行顶」+ 窄屏本身,**不来自侧栏宽度**。V2 当时把成因记作「侧栏加宽 + Page Shell」,本轮实测把前半句划掉:侧栏收窄 56px 对首行顶**没有任何影响**。⚠️ **V4 整表重跑,逐档数值与 V3 完全相同**(`669 / 669 / 669 / 669 / 669 / 669 / 669 / 661 / 661 / 661 / 661 / 676 / 714 / 729 / 729 / 822`)—— 本轮改的是 P2 选题库(它在「对标内容」**之下**)与 P5/P6,没碰 P1 与 P2 对标内容这两处被量的块,所以数没变;⛔ 不是沿用上一版,是重跑后一致。是否动窄屏断点,仍待用户裁定。 +7. **规格核对只走本地已测值** —— §六 的实测值全部由 `#/selftest` 与 `_tools/` 现算,⛔ 不目测。上一版留档的两处遗留(`500×844` 一屏 −1 行、满宽表格与一屏 ≥6 行不可兼得)本轮**重测后如实登记**,⛔ 不靠改判据过关。 +8. **②段那处内部不一致已订正(V3 登记 → V4 关闭)** —— V3 登记过:`2b` §五 P2 的板块清单把「灵感速记」列为第 5 块,而同页信息分档表把它标成「全局可达(框架层,不占板块)」,两处打架。🔴 V4 按用户口径(选题库容纳「对选题有帮助的任何信息」、随手记仍落选题库)**把两处统一**:灵感速记**不再是板块**,P2 由 5 块收成 4 块;现在板块清单与信息分档表一致。骨架总数仍 39(P2 −1、P6 +1)。 +9. **定时发布本轮挂起(⛔ 不进界面)** —— 用户口径逐字(2026-10-10 07:56):「后续具体做投放功能的时候在说」。⇒ 本段**不写**定时发布:⛔ P5 不加「定时设置」块、⛔ 不加状态、⛔ 不改流转。登记在②段 `2a` §九 第 7 项与 `2b` §十 第 7 项,真做投放功能时再议。 + +--- + +## 六、数值取证登记(自检 + 工具实测回填,⛔ 非目测) + +> 本表由 3b 阶段现算回填,数据源:`#/selftest`(DOM 取值 + 真实像素)+ `_tools/` 八个脚本。⛔ 一个数都不许拍脑袋。 +> **Gate-1 方向门的逐条结论 + 实测依据在 §八**(全文结尾,⛔ 不在这里再抄一遍)。 +> 此处只放一条 `DESIGN.md` 独有的登记:**逐视口表**(自检全文、20 条变异、三条反向变异、四条改动明细见 `ui/3b-实测记录.md`;两处冲突以 `3b-实测记录.md` 为准)。 + +### 6.1 逐视口表(16 档;契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1,⛔ 不分档) + +`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 9223 已有实例)。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1280×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1024×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1000×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 960×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 920×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 901×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 900×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 840×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 820×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 768×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 700×900 | 78/0 | 676px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 640×900 | 78/0 | 714px | 31px | 6 | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | 77/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | 77/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | 76/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档**(`run_viewports.py`:`逐视口:不达标 3 / 共 16`)。行距在所有档恒为 `31px`、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(669 → 822px)。 + +> 🔴 **V3 重测的结论(这一条的写法改过)**:V2 把这三档的成因记作「侧栏 `64 → 184px`(主区变窄)+ 新增 Page Shell」。本轮把侧栏**收窄到 `128px`** 之后重跑整表,P1 首行顶逐档**与 V2 完全相同**(`669 / 729 / 822px`,只有 `768×900` 一档由 `676 → 661px`)⇒ **侧栏宽度不是成因**,「主区变窄」这半句划掉。剩下的是 **Page Shell 一层把 P1 首行顶抬高**(P1 的页框架三件套共占 ~669px 的顶高,窄屏因主区变窄、表格列换行又再加一截)。 +> +> ⚠️ **`390×844` 能测 ≠ 达标**:它是契约要求留档的第二个视口,帧已出(PNG 尺寸当场比对通过),但 P1 装下 0 行、P2 只有 5 行。 +> +> 🔴 **V4 重跑(整表 16 档全量重算,⛔ 不是沿用)**:`run_viewports.py` 输出 `逐视口:不达标 3 / 共 16`,16 档逐格数值与 V3 **完全相同**(自检 78/0、红档 77/1 与 76/2 也都一样)。原因:本轮动的是 P2 选题库(在「对标内容」之下)、P5 目标选择与 P6 平台账号,**没碰 P1 与 P2 对标内容**这两处被量的块。⇒ 红档成因与 V3 同:**Page Shell 一层把 P1 首行顶抬高**,窄屏再叠一层表格列换行。本轮**未动**窄屏断点,⛔ 也没有为了让数好看去改判据。 + +--- + +## 七、修订记录 + +| 轮次 | 改了什么 | 为什么 | +|---|---|---| +| V2 初版(2026-10-09) | ①**导航**由「一层八项平铺」改回「3 个业务组 + 1 个跨组入口」,侧栏由 `64px` 药丸浮栏加宽到 `184px` 带组标圆角浮栏;②**新增页面公共框架(Page Shell)**一层(标题区/数据摘要区/页面操作区/辅助入口区),并写明三条硬规则(不计板块数、不参与功能归属、不占冻结计数);③**撤销「功能入口」那一层**(`.sect-nav` / `.data-cards` / `.data-card` 与 `card()` 全部删除);④**骨架按新版 39 块重排**:P4 由 5 → 6、P7 由 5 → 6、P2 第 3 块注明可点入子区;⑤**对象冻结**:每个业务板块带 `data-obj`;⑥P7「确认与改判」落为回写的**前置开关**(`confirmed` 为假时回写禁用);⑦P4 版本管理承担 F7/F8、录制卡片与画板承担 F14;⑧撤销检索浮层(全局检索改为 P1 业务板块) | 按新版 `2a`/`2b` 重做第 4 步。逐条依据:`2b` §三/§四/§一第 2 条+§九第 2 条/§九第 8–15 条/§五(39 块);`2a` §一第 2 条、§三 F7/F8/F14、F10 | +| V2 复核棒(2026-10-09) | ①新增 `3b-实测记录.md`(自检 77 项全文、变异 20/20、三条骨架反向变异、16 档逐视口、四条改动明细);②本份补 §6.1 逐视口表 + §八 Gate-1 加「实测依据」列;③`_tools/` 补齐到 8 个脚本(新增 `tab_close.py`,`cap.py`/`grab_selftest.py` 改单标签复用);④`_gate_shots/` 补到 17 张视口帧 | 第 4 步只差「闸门取证 + 台账上报」。⛔ **未重做界面**:原型仅动 4 处(自检重入死循环守卫 / 「功能入口层残留」判据改八页逐页查 / `hashchange` 守卫回退 + 注释 / `check_skeleton.py` 判据由「互为前缀」收紧为「剥注解后严格相等」),几何与骨架一格未动 | +| **V3 本轮(2026-10-09,用户令)** | ①**P8 记录与对账整页并入 P7 复盘台**:`pageP8` 删除、四个板块接进 `pageP7`、动作 ID 由 `P8-01…04` 改 `P7-09…12`、`FROZEN` 的 p7 由 6 块改 10 块、`PAGES` 由八页收成七页;②**导航压成一层七项**(首页/选题/创作/投放/复盘/账号/资产,资产排最后):删 `NAV_GROUPS`/`NAV_CROSS` 与 `.nav-group`/`.nav-group-label`/`.nav-cross` 及其 `≤640` 规则,改 `NAV` 数组 + `renderNav()`;③**侧栏由 `184px` 收窄到 `128px`**,侧栏品牌名隐藏(顶栏已写全称),`.nav-item` 内衬 `0/12 → 0/8`;④**功能 ↔ 板块一一对应**做成机检:`FN_HOME`(功能→归属页)+ `FN_MAP`(页→板块→功能)+ 自检 5b-3 双向查;⑤自检新增 **3a-0 页集合正好七页**、3a/3b 重写为「一层七项、零组标、项名与顺序照用户口径」;⑥`renderSelftest()` 的兜底分支改成**吐可读输出**(原来崩了就不带 `#selftest-out`,取证工具全瞎) | 按用户口径改导航层级与 P8 归属,并同步 `2a`/`2b` V3。逐条依据:`2b` §〇/§三/§五 P7/§六 第 6·14·18 条/§九;`2a` §二/§三 F12·F13/§四/§十。⚠️ 侧栏收窄是③段的判断(几何不在样式库内):`184px` 的唯一理由是容下组名,组名撤掉后该理由消失 ⇒ **可推翻,改一处 `--nav-w` 即回退** | +| **V4 本轮(2026-10-10,八条口径)** | ①**P2 选题库加「类型」维度**:第二个 `.seg`(全部/选题/对标线索/评论洞察/数据异动/灵感)+ 选题行加「类型」列,与「进度」正交(新 ID `P2-12`;`TOPICS` 逐条补 `type`);②**P2 删掉「灵感速记」板块**(骨架 5 → 4 块),随手记只留全局入口(撤 `P2-11`);③**P3 职责改「统一管理」**,页面副标题与分档对齐,入库不限页;④**P4 版本管理**展开单位由「账号 × 平台」改「**平台账号**」(按钮文案、说明、`P4-11` 实现与提示同步);⑤**P5 目标选择改两级**:数据由 `targets:{accounts,platforms}` 改 `{accounts,channels}`,新增 `PLATS`(平台账号=渠道,带登录态/授权状态),摘要区「目标渠道数/覆盖平台数」,各版本块写死「一个平台账号一版(一版一路)」,`P5-02`/`P5-03` 改为「内容账号连带渠道一起增删」;⑥**P6** 画像六维 → **画像五维**(删「平台」这一维与 `PROFILES` 的 `平台` 字段),**新增「平台账号」板块**(骨架 4 → 5 块,新 ID `P6-06`/`P6-07`),账号行次级信息改成「平台账号数」;⑦`FROZEN`/`OBJ_MAP`/`FN_MAP` 三表同步(总数仍 **39**);⑧本份 §1.2/§2.4/§五/§6.1/§八/§九 全量同步 | 按用户 2026-10-09~10-10 的八条口径改②段两份并重做原型。逐条依据:`2b` §〇/§一/§五 P2·P3·P4·P5·P6·P7/§九;`2a` §一 第 2·4 条/§二 对象字典/§三 F2·F4·F7·F9·F13/§九。⛔ 页面数、导航一层七项、流转 20 条、令牌与几何**一格未动**;⛔ 定时发布按用户口径挂起,本轮不落 | + +--- + +## 八、Gate-1 方向门自检(硬闸) + +> 结论列=本轮(V3)的判定;**实测依据**列=本轮现取的证据(自检项名 / 脚本名 / 变异编号 / 实测像素),⛔ 不是目测。全量证据见 `ui/3b-实测记录.md`。 +> V3 比 V2 多两行(第 13、14 行):V3 的两条主判据(页集合与导航层级、功能 ↔ 板块一一对应)各自单列,⛔ 不并进邻行糊过去。 +> V4 比 V3 多一行(第 15 行):本轮的主判据是「八条口径落进骨架」,单列一行;⛔ 不借用第 2b/11/12 那几行的旧结论糊过去。 + +| # | 检查项 | 结论 | 依据 | 实测依据(2026-10-09 复核棒现取) | +|---|---|---|---|---| +| 1 | 设计契约十二字段 | ✅ 过 | §一 | 十二字段全填,无空、无「待定」;重复项逐页列了次级信息 | +| 1b | 页型判定 | ✅ 过 | §一 | 自检「工具型纪律:零 `.eyebrow` / 零 `.lead` / 零 `.hero`」PASS;「`@keyframes` 共 0 处」PASS | +| 2 | 结构骨架(翻译面) | ✅ 过 | §1.1 ⑤ | 骨架档=主区+侧区(给了理由);②段分档表每条信息都有落位(§1.2 逐页核对) | +| 2b | 骨架未漂 | ✅ 过 | §1.2 | `_tools/check_skeleton.py` 正向 PASS:七页 **39 块**与 `2b-界面布局-新版.md` §五 逐页逐位一致;自检「骨架冻结:七页 39 个板块…逐位一致」PASS;反向变异 **M4**(塞板块)/**M19**(改页标题)/**M22**(页面表多一页)各报红 | +| 3 | 状态覆盖 | ✅ 过 | §1.3 | 六态逐页有结论;自检「六态 × 七页 = 42 个组合全部渲染出内容」PASS;`disabled` 与 `无权限` 分开写 | +| 4 | 令牌表 | ✅ 过 | §2.2/§2.3 | 自检实测对比度:`--warn` 对 surface = 5.93:1、`--accent-text` = 4.76:1、`--ink-faint` = 3.55:1(三条均过契约) | +| 4b | 字阶定值表 | ✅ 过 | §2.3 | 七档各一个 px(12/14/16/18/20/24/30),相邻差 ≥2;自检实测**在用** 5 档:12/14/18/20/24 | +| 4c | 高度层级 | ✅ 过 | §2.3 | L1/L2/L3 每层 ≥2 层叠层;自检「无单层死黑重阴影」PASS | +| 4d | 布局脚手架 | ✅ 过 | §2.3 | 侧栏 `128px` + 主区 `minmax(0,1fr)`;自检实测 1440×900:侧栏 128×350px、顶栏 49px、主区 clientH 851 / scrollH 1435 | +| 5 | 组件规格 | ✅ 过 | §2.5 | 按钮三档+卡片两档+输入框+徽章均为具体值;自检「首屏同屏主档按钮 ≤1 个」PASS | +| 6 | 反 slop | ✅ 过 | §2.2 | 无紫→粉渐变;标题走展示体;强调色填充实测最高 0.52%(契约 ≤5%,在创作台) | +| 7 | 拒绝清单 | ✅ 过 | §1.1 ⑩ | 共 **8** 条,每条带可判定判据(≥3 ✅);其中第 6/7/8 条由自检「组件口径」「Page Shell」「辅助入口区」三条判据 + 变异 M15 看住 | +| 8 | token 引用完整性 | ✅ 过 | §2.1 | 三层结构;组件层只引语义层、语义层只引 primitive;无孤立 token | +| 9 | 分档兑现 | ✅ 过 | §1.2 | 常驻=零点击可见、可点入=一次点击可达;档位未被本段改动(P7 前后两半合页后逐条重核) | +| 10 | 供给核对 | ✅ 过 | §〇 | 选定套 `design-system-tiaoyue`,与上一版一致(沿用同一套) | +| 11 | 对象冻结(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内」PASS;变异 **M17** 报红 | +| 12 | Page Shell 不占板块(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页各恰好 1 个,且都不带 `.block` / 不带 `.block-head h2`」PASS;逐页 `.block` 数 = `FROZEN` | +| 13 | 页集合与导航层级(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检「页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8)」PASS +「导航一层七项…零组标 / 零跨组线」PASS +「导航七项与用户口径逐字一致、顺序相同…(资产排最后)」PASS;变异 **M21**(塞回组标)/**M22**(P8 复活)/**M16**(项名漂移)各报红 | +| 14 | 功能 ↔ 板块一一对应(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检 5b-3「功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立)」PASS;变异 **M23**(归属漂移)/**M24**(悬空功能)各报红 | +| 15 | 八条口径落进骨架(本项目追加,V4 新立) | ✅ 过 | §〇 / §1.2 / §2.4 | ① 骨架冻结「七页 **39** 个板块…逐位一致」PASS(P2 由 5 收 4、P6 由 4 增 5,一减一加);`_tools/check_skeleton.py` 正向 PASS;② 自检「页集合正好七页」「导航一层七项」「功能 ↔ 板块一一对应」三条全 PASS ⇒ 口径改的是**页内构成**,页集合/导航/流转一格未动;③ 交互清单 90 个 ID「无悬空、无未登记、0 死控件」PASS(撤 1 新增 3 已同步);④ 变异对照 **24 / 24** 全过、基线回绿;⑤ 逐视口 16 档整表重跑,不达标仍 3 档(与 V3 逐格同值 —— 未动被量的块) | + +⇒ **Gate-1 二十行全过。** 唯一未达线的是**密度契约**(窄屏三档:560×900 / 500×844 / 390×844),它属 3b 实测的登记项、⛔ 不属 Gate-1 门 —— 见 §6.1 与 `3b-实测记录.md` §八。 + +--- + +*本份是原型的绑定规范:原型只许引本份登记的 token。* + +## 九、说人话自评(本轮改动的文字部分;判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 10 | §〇 一上来就列「V4 本轮改了什么(六条)」,每条一句说清改了什么;§五 缺口 8 直接写「已订正(V3 登记 → V4 关闭)」 | +| 节奏 | 8 | 本份天生是规范体裁(表格为主),改动段落已补叙述,⚠️ 弱项 | +| 信任度 | 10 | 逐视口表重跑后数值与 V3 相同,明写「⛔ 不是沿用,是重跑后一致」并给出原因(没碰被量的块);三档红照旧留着不粉饰 | +| 真实性 | 9 | Gate-1 第 15 行挂的是本轮现取证据(判据名 / 变异 24-24 / 90 个 ID / 逐视口 3 档);正文数(39 块,逐页 5+4+4+6+5+5+10)可当场加总复核 | +| 精炼度 | 8 | 新增只落在 §〇 一节 + §七 一行,⛔ 没在别处复述;但 §五 缺口与 §6.1 说明确实变长了一点 | +| **总分** | **45 / 50** | 门槛 ≥45 ⇒ 压线过;扣分点仍全在「节奏 / 精炼度」两行(规范体裁,叙述段天然少) | + +> 全量实测与八条口径落地的现象/根因/证据见 `ui/3b-实测记录.md`(该份自评 47/50)。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fc471a.md b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fc471a.md new file mode 100644 index 0000000..14c4b31 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/DESIGN__fc471a.md @@ -0,0 +1,432 @@ +# MCN 短视频整合营销工作台 · DESIGN.md(V3 · 导航改一层七项并 P8 并入复盘) + +> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3a 子步产出 +> 本版是**第 5 步(按用户口径改导航层级与功能归属)**的绑定规范。⛔ 不是给 V2 打补丁,是按②段 V3 重出一版。 +> 落点:`执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/DESIGN.md`(目标目录内;⛔ 未写域外 `docs/pm/`)。 +> 判据源:`product-planning/references/stage-delivery/SKILL.md`(含 §供给 / Gate-1)+ `references/execution-runbook.md` §2 + `references/layouts-tooling.md` §5.5。 +> 上一版原型只读对照:`执行会话/目标-梳理板块与操作路线,经GPT规划后重做②-071c5b/ui/`(V2 原型与 `DESIGN.md`)。本版沿用其令牌与组件,⛔ 不覆盖 V2 文件。 + +--- + +## 〇、开工声明(声明制,四字段) + +| 字段 | 内容 | +|---|---| +| 当前段与子步 | ③段 / 3a 视觉规范(D0 锚需求 → D1 定调 → Gate-1)→ 3b 原型 | +| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据)。挡位 **标准** | +| 依据文件 | `stage-delivery/SKILL.md` §供给 + §3a/§3b;`execution-runbook.md` §2;`layouts-tooling.md` §0/§1/§5.5;②段 `2a-产品功能-新版.md`/`2b-界面布局-新版.md` | +| 产出落点 | `ui/DESIGN.md`(本份)、`ui/mcn-workbench.html`(3b)、`ui/_tools/`、`ui/_gate_shots/` | + +### 供给核对(runbook §2.0 · 步 −1,每轮必做) + +| 步 | 动作 | 结果 | +|---|---|---| +| −1 | 确认 §供给 三处在位 | ✅ `references/layouts-tooling.md`、`references/execution-runbook.md` 都在位;定调与令牌档在位 1 套 `assets/design-systems/design-system-tiaoyue/` | +| −1b | 套名与上一版记录比对 | ✅ 上一版 `DESIGN.md` 选定 `design-system-tiaoyue`,本版**沿用同一套**(用户 2026-10-07 令「每次设计只选一套」)⇒ 不触发变更清单 | +| −1c | 可选档是否动用 | ⛔ **未动用** `assets/open-design/`(随后续口径可选)。它独有的四项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)**本次无逐项数值供给来源** —— 见 §五 缺口 1,⛔ 没有凭感觉编一套顶上 | + +### 页型判定(硬前置,SKILL.md §3b) + +**全部 7 页都是工具型页面。** 依据:用户是天天来干活的 MCN 团队,每页都有人在里面完成一件事(决定先处理哪件 / 挑一条选题 / 存一条拆解 / 推一个环节 / 确认一次发布 / 改一份画像 / 写一条归因并核一条记录);没有一页是让人「看一眼就下决心」。 +⇒ 本份零 `.eyebrow`、零 `.lead`、零 `.hero`,且 `body.is-marketing` 之外的类名一个不设。与②段 `2b` §二「本产品是工具型页面,不是营销页」一致。 + +--- + +## 一、设计契约(十二个字段) + +### 1.1 项目级字段 + +**① 主用户**:MCN 机构的内容负责人(矩阵级决策)、编导与文案(选题与创作)、剪辑与投放(版本与发布)。依据①段 `1c-用户画像.md`(零访谈画像 —— 局限已登记在旧版 §四缺口 4,本版沿用)。 + +**② 主操作**:**逐页唯一**,照②段 `2b` §五 各页「主操作」原样落,本段未改一个(逐页见 1.2)。 + +**③ 必要内容(核对面)**:②段信息分档表逐页核对,见 1.2。只做**落位核对**(主屏常驻=零点击可见,可点入=一次点击可达),⛔ 不以它为由增删档位。 + +**④ 重复项的信息量**:四个主列表(账号矩阵 / 对标内容 / 资产条目 / 发布记录)是**满宽表格**,每行除「主标识 + 动作」外都带次级信息,逐页列在 1.2。 + +**⑤ 结构骨架(翻译面)**: + +- **骨架档:主区 + 侧区**。理由:一级导航覆盖 7 个目的地、宽屏 ≥1024;选定套的外壳本身就是「侧栏 + 主区」的应用型外壳,两者同构。 +- **导航层级:一层七项**(2026-10-09 按用户口径与 `2b` V3 §三 重做)。V2 做的是「3 个业务组 + 1 个跨组入口」,本版**把层级整个压平**: + - 七项按用户给的先后:**首页(P1)/选题(P2)/创作(P4)/投放(P5)/复盘(P7)/账号(P6)/资产(P3,排最后)**。 + - ⛔ **零组标、⛔ 零跨组分隔线、⛔ 零第二层**。V2 的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组线连同对应 CSS 一起删掉。 + - 项名**逐字取用户口径**(首页/选题/创作/投放/复盘/账号/资产);页面自己的名字不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。最要紧的一处:**导航叫「投放」,页面仍叫「发布中心」** —— 这一页只管内容发布与排期,⛔ 没有扩功能。 + - 「资产排最后」是硬约束(用户明说);其余六项照用户给的先后。 + - ⚠️ V2 遗留的「组名与短名怎么对应」这项待确认随之作废(组没了);**新冒出一个问号**:七项是否要另配一套两字短名 —— 现已按用户口径直接用全名,⛔ 本段没替用户起短名。 +- **侧栏形态:圆角浮栏,宽 `128px`**(V3 由 `184px` 收窄,相对 V2 是一处**显式改动**): + - 收窄的理由:V2 把栏做到 `184px`,唯一理由是「要容下**组名**一行」;组名按用户口径撤掉之后,这条理由消失,`184px` 就成了没人认领的余量,主区白白少 `56px`。 + - 宽度按「最长项名(2 字)+ 计数徽章 + 一指宽余量」定:内容宽 `128 − 16 − 2 = 110px` ≥ 项内容 `96px`(项内衬 `16` + 图标 `20` + 间距 `8` + 名 `28` + 间距 `8` + 徽章 `16`)。 + - 保住选定套的**圆角浮栏**性格(圆角 `24px`、淡底、`1px` 淡描边、四周留白、随内容高、在列内垂直居中);⛔ 没有引入第二套配色或第二套圆角 —— 令牌全部来自 `design-system-tiaoyue`。 + - 品牌名在 `128px` 里放不下(顶栏已写全称)⇒ **侧栏只留标记并居中**,`.sidebar .brand-name` 隐藏。 + - ⚠️ **几何不在样式库内**(§供给 明写「自带样式库实测只到调色板级」)⇒ 栏宽是③段的判断,不是从包里抄的。备选:保 `184px`(列更空)、或压到 `64px`(须把项改成「图标在上、名字在下」)⇒ 改**一处** `--nav-w` 即可推翻(见 §七 修订记录)。 +- **每页收口形态(七页统一)**:`页面公共框架(Page Shell)` → `业务板块若干(从上到下)`。⛔ 本版继续**不要**上一版那层「功能入口卡」(`.sect-nav` / `.data-cards` / `.data-card`):`2b` §一第 2 条与 §九第 2 条明令撤掉,它的文字本来就是流转表的副本。跨页入口只留在两处:**侧栏**(七页一次点击可达)与**业务板块内的行级动作**(流转表就落在那里)。 +- **密度目标:密集(8–32)**。理由:7 页都是一屏要放多行记录的工具型页面,`2b` P1 要求矩阵与今日待办**同时**常驻,宽松档放不下。同一页面只取这一档。 +- 块间距 ≥ 块内间距的 2 倍:块间 `32px`、块内 `8/12/16px` ⇒ 比值 2.0–4.0 ✅。 + +**⑥ 交互清单**:见 §二 表 2.4(逐元素四列)。**它是唯一的交互真相源** —— 3b 实测、自检、变异对照都引这一张,⛔ 不另建一份。 + +**⑦ 状态覆盖六项**:见 1.3,逐页逐项有结论。 + +**⑧ 组件来源**:优先沿用选定套既有组件族,其次自创。⛔ 未参考 `teamOnly: true` 的族。清单见 §二 表 2.5。 + +**⑨ 响应式行为**: + +| 断点 | 布局怎么变 | +|---|---| +| `>1024` | 侧栏 `128px` 圆角浮栏常驻(⛔ 宽度不随断点变)+ 主区 `minmax(0,1fr)` | +| `1001–1024` | 侧栏仍 `128px`;两栏分栏与满宽表格都不变;顶栏间距收到 `8px`;顶栏不折行 | +| `901–1000` | 同上,另:统计条最小宽 `132 → 96px`(4 格不折行) | +| `821–900` | 上述继续;另:两栏分栏 `.grid-main-side` → 单列(右栏被挤到 300px 以下就会折行) | +| `641–820` | 上述继续;另:统计条、表格列宽由 `auto` 收窄,主区内衬 `32 → 16px` | +| `≤640` | 侧栏**变成页头下方一条可横向滚动的标签条**(⛔ 不隐藏);项高 `36px`;主区单列 | + +**滚动容器**:整页不滚、**只有主区 `.view` 滚**。高度链三件套必须齐:`.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`。少写一处 ⇒ 整页「滚不动」而不是「不滚」(上一版踩过并留档)。**判滚动四个容器都要核**:`window`/`html`/`body`/`.view`。 + +**⑩ 明确拒绝的模式**(≥3 条,每条可判定): + +1、⛔ 不出现「眉标/大标题/灰色副标题」三段式标题区(判据:DOM 里 `.eyebrow` / `.lead` / `.hero` 三个类名出现次数为 0)。 +2、⛔ 不用围合边框假装分组(判据:非控件元素里 `border` + `border-radius` 同时出现在同一「分组」用途上 ≥3 次即判不过;结构性容器靠底色差 + 多层阴影分层)。 +3、⛔ 不给列表行套框、不给状态上整行底色(判据:行间只用 `border-top`;状态只出现在 `tag` 内)。 +4、⛔ 不做**逐区块**入场编排(判据:`@keyframes` 至多 1 处;过渡只用 `transition`,⛔ 不用 `linear` / `ease`)。 +5、⛔ 不可点的东西不长成可点样子(判据:页面里所有 `button` / `[role=button]` / `.btn*` 集合与 §二 表 2.4 的元素列做双向差集,差集为空)。 +6、⛔ **不用内联样式表达「选中态」或覆盖「字号」**(判据:七页里 `[style*=border-color]`、`[style*=color]`、`[style*=font-size]` 的出现次数**都为 0**)。选中态全站**只有一套画法**:`.is-on` / `.is-active`(整块浅紫底 + `--accent-text` + 字重 600);字号只许走 `--fs-*` 七档。 +7、⛔ **页面公共框架不许进板块计数、不许参与功能归属、不许占对象冻结计数**(判据:`.block` 数逐页等于 `FROZEN`;`.page-shell` 自身不带 `.block` / 不带 `.block-head h2`)。 +8、⛔ **辅助入口区不许把流转表再写一遍**(判据:每页 `.shell-aux` 里的 `[data-page]` 元素 ≤1 个)。 + +**⑪ 验收标准(可观察可判定)**: + +- 七页各自可达(`#/p/p1` … `#/p/p7` 直接打开都渲染出该页内容,不是空壳)。 +- 表 2.4 每一行的「触发 → 反馈」都真发生过,无死按钮。 +- 六态在每一页都能被看到(正常 / 加载 / 空 / 错误 / 禁用 / 无权限)。 +- 宽视口 `1440×900` 与窄视口各留截图,横向溢出为 0。 +- 页面上每个可点元素都能在表 2.4 里查到;表里没有的可点元素为 0。 + +**⑫ 明确拒绝的「编造」**:界面上不出现「示例 / 示意图 / 未接入 / 待核实」这类制作说明;也不把机器结论说成人已认可(如把「疑似原因」写成「已确认原因」)。 + +### 1.2 逐页字段(页面职责 / 主操作 / 必要内容落位 / 重复项信息量) + +| 页 | 页面职责 | 主操作(唯一) | 必要内容的落位核对 | 重复项的次级信息 | +|---|---|---|---|---| +| P1 矩阵总览 | 让内容负责人在 1 分钟内决定**今天先处理哪一件** | 挑一件待办并进到那一件事 | 账号矩阵、今日待处理=零点击可见;异常值、本月最好、全局检索=一次点击可达 | 账号行=账号名 + 今日该发/已发/效果 + 异动标 | +| P2 选题雷达 | 让编导在 3 分钟内**找到一条能做的选题** | 把一条选题推进下一步 | 对标监控概览、对标内容、选题库=零点击可见;评论区洞察、灵感速记=一次点击可达 | 对标行=标题 + 账号 + 倍数 + 时间;选题行=选题 + 来源 + 状态 | +| P3 资产库 | 让编导在 2 分钟内**存一条拆解结果、或引用一条已存的** | 入库一条 / 引用一条 | 分区切换、资产条目=零点击可见;单条详情、引用入口=一次点击可达 | 条目行=条目摘要 + 出处 + 草稿/已入库 + 采集时间 | +| P4 创作台 | 让编导在一条内容上**把当前环节推到下一环节** | 推进到下一环节 | 创作流程、当前环节工作区、AI 产出与采纳、当前内容上下文=零点击可见;资产引用、版本管理、录制卡片与画板=一次点击可达 | 版本行=vN + 语义名 + 时间 + 当前标记 | +| P5 发布中心 | 让投放**确认发出这一批版本** | 确认发布 | 检查结果、各版本与逐版编辑、确认发布=零点击可见;目标选择、发布记录=一次点击可达 | 版本行=账号/平台 + 字数 + 检查结论 | +| P6 账号画像 | 让内容负责人**改好并保存一个账号的画像** | 保存这一份画像 | 画像六维、账号列表=零点击可见;记忆条目、关联内容=一次点击可达 | 账号行=账号名 + 平台 + 内容数;记忆行=日期 + 来源 + 一句话 | +| P7 复盘台 | 让内容负责人**确认归因并写回这个账号**,顺带**核销一条发布记录** | 确认归因并回写 / 核销一条记录 | 表现数据、归因结论、确认与改判、待复盘项、回写目标提示、发布记录、对账核对区=零点击可见;历史复盘、单条溯源、商单与收支=一次点击可达 | 待复盘行=内容 + 发布账号 + 发布日 + 数据到没到;记录行=内容 + 确认人 + 时间 + 版本 + 状态 | + +### 1.3 状态覆盖六项(逐页给结论) + +判据源:`SKILL.md` 铁律 2 的六态清单。⚠️ 逐项**数值判据**出自供给可选档 `craft/state-coverage.md`,本轮未动用可选档 ⇒ **该项本次无供给来源**,故只给「有没有、长什么样」的结论,不编阈值。 + +| 页 | loading | empty | error | success | disabled | 无权限 | +|---|---|---|---|---|---|---| +| P1 | ✅ 矩阵数据加载中(骨架行) | ✅ 还没接入账号(给「去账号画像建第一个账号」) | ✅ 数据源不可用(显时间戳 + 重试) | ✅ 默认态 | ✅ 无可处理项时待办区禁用并说明 | ✅ 非管理员看利润字段时的遮罩说明 | +| P2 | ✅ 拉取对标中 | ✅ 监控名单为空(给「录一个对标号」) | ✅ 拉取失败(退路=手工录入) | ✅ 默认态 | ✅ 未选账号时「转入创作」禁用 | ✅ —(不适用:本页对所有角色开放) | +| P3 | ✅ 条目加载中 | ✅ 该分区还没有条目(给「去拆解一条」) | ✅ 读取失败(重试) | ✅ 默认态 | ✅ 无出处条目「入库」禁用(门禁) | ✅ —(不适用) | +| P4 | ✅ 环节生成中 | ✅ 该环节还没产出(给「开始这一步」) | ✅ 本步失败(保留已产出 + 重试该步) | ✅ 默认态 | ✅ 文案与封面缺一,「进检查态」禁用(封面缺只提示;F6 守卫) | ✅ —(不适用) | +| P5 | ✅ 检查中 | ✅ 还没有可发布的版本(回 P4) | ✅ 检查自身失败 ⇒ **按不过处理**(fail-closed) | ✅ 无硬拦、可发 | ✅ 有硬拦项时「确认发布」禁用 | ✅ 未授权账号的版本标「无发布权限」并禁用该版 | +| P6 | ✅ 画像加载中 | ✅ 还没有画像(给「建画像」) | ✅ 保存失败(保留编辑内容) | ✅ 保存成功提示 | ✅ 只读角色时字段禁用 | ✅ 非本人负责账号:可看不可改 | +| P7 | ✅ 读数据中 | ✅ 还没有可复盘的内容 | ✅ 数据读不到 ⇒ 转手工录入表现 | ✅ 回写成功提示 | ✅ **未确认归因(`confirmed` 未置)时「回写」禁用**(F10 前置开关) | ✅ —(不适用) | +| P7 后半(原 P8) | ✅ 记录加载中 | ✅ 还没有发布记录 | ✅ 读取失败(重试) | ✅ 核销成功 | ✅ 未选中记录时「核销」禁用 | ✅ 利润列对非管理员隐藏(列级遮罩) | + +> 口径:`disabled` 与 `无权限` 是两件事 —— 前者是「当前条件不满足」(自己能解开),后者是「角色不允许」(自己解不开)。界面文案分开写,⛔ 不拿「不可用」一句话糊过去。 + +--- + +## 二、令牌表 + +### 2.1 三层结构(`primitive → semantic → component`) + +组件层只引语义层,语义层只引 primitive;⛔ 无孤立 token。 + +### 2.2 色值(来源=选定套 `design-system-tiaoyue` 亮色基线 · 9 页 clipper 实测) + +| 语义 token | 值 | 用途 | +|---|---|---| +| `--paper` | `#faf9f5` | 页面底(暖白纸感) | +| `--surface` | `#ffffff` | 面板 / 卡片底 | +| `--surface-soft` | `#f7f6f1` | 次级面(表头、只读块、侧栏组标底) | +| `--ink` | `#1a1a18` | 主文字 | +| `--ink-mute` | `#57564f` | 次级文字 | +| `--ink-faint` | `#8a887f` | 三级文字 / 占位 / 组标(⛔ 只用于非正文) | +| `--line` | `#e7e5dc` | 分隔线(行间 `border-top`) | +| `--line-soft` | `#efeee7` | 更弱的分隔(块内) | +| `--accent` | `#9E4CFF` | 主强调色(品牌紫) | +| `--accent-text` | `#963dff` | accent 当**文字**时用这一档 | +| `--on-accent` | `#FFFFFF` | 主色上的文字 | +| `--ok` | `#3d7a4f` | 成功态 | +| `--err` | `#b4453a` | 错误态 | +| `--warn` | `#8a5a00` | 提醒 / 异常值 / 软劝。**本项目追加**:选定套亮色基线没有 warn 档,而②段 P5 要求「硬的拦住、软的只提醒」要有两种可见区分 ⇒ 新增一档并登记实测对比度 | + +**强调色允许位置**:① 主按钮填充底;② 侧栏当前项与分段控件选中项的**整块浅底**;③ 链接文字(用 `--accent-text`);④ 焦点环。⛔ 不允许出现在页面大背景、卡片底、图标填充(除主按钮内图标)、任何渐变。全屏面积 ≤5%。 + +**禁止**:⛔ 无紫→粉渐变;⛔ 无装饰性发光;⛔ 状态色只用红/绿/黄三系,不做装饰。 + +### 2.3 几何 · 字体 · 间距 · 字阶 · 高度层级 · 脚手架 + +| 项 | 值 | 来源 / 说明 | +|---|---|---| +| 字体 | `"PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans SC", sans-serif` | 选定套实测:源站 `@font-face` 为 0 条,走系统字体栈 | +| 标题字体(展示体) | `"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走黑体栈);字重 ≤600 | 沿用上一版方案 A:宋体标题 + 黑体正文=两族对照,符合「字族 ≤2–3」。⛔ 未用 Inter / Roboto / `system-ui` 关键字 | +| 等宽数字 | `font-variant-numeric: tabular-nums` | 所有数字列,防刷新抖动 | +| 圆角 | 大容器 `24px`/面板 `16px`/行与小件 `14px`/输入框 `9px`/按钮 `26px`(药丸) | 全部取自选定套 | +| 间距 · 主刻度 | `4 / 8 / 16 / 24 / 32 / 64` | 供布局。块间用 32,块内 8/12/16 | +| 间距 · 微网格 | `2 / 4 / 6 / 8 / 12` | **仅供**按钮内衬、徽章内衬、图标间隙 | +| 块间距 / 块内间距 | 32 / 8–16 ⇒ 比值 2.0–4.0 | 判据要求 ≥2 ✅ | +| 字阶定值表(七档) | `--fs-12` 12 / `--fs-14` 14 / `--fs-16` 16 / `--fs-18` 18 / `--fs-20` 20 / `--fs-24` 24 / `--fs-30` 30 | 相邻差 2/2/2/2/4/6 全部 ≥2 ✅;每档只一个定值 | +| 高度层级(每层多层叠层) | L1(行/内嵌):`0 1px 1px rgba(26,26,24,.03), 0 2px 6px -2px rgba(26,26,24,.06)`<br>L2(面板):`0 1px 2px rgba(26,26,24,.04), 0 8px 20px -12px rgba(26,26,24,.14), 0 18px 40px -18px rgba(26,26,24,.10)`<br>L3(浮层):`0 2px 4px rgba(26,26,24,.05), 0 14px 32px -12px rgba(26,26,24,.18), 0 32px 64px -24px rgba(26,26,24,.16)` | 每层 ≥2 层叠层 ✅ | +| 布局脚手架 | 侧栏 `128px` 圆角浮栏(随内容高、列内垂直居中)+ 主区 `minmax(0,1fr)`;主数据块走满宽表格(`.ds-table.tbl-dense`);两栏分栏 `.grid-main-side` 宽比 `1.35fr : .9fr` | 骨架档=主区+侧区,已落到具体列宽 | +| 容器与对齐锚点 | 主区左右内衬 `32px`;表格与块标题左锚点同一条线;数字列右对齐且右锚点对齐块右内衬 | 判据要求「对齐锚点」写明 | +| 浮层 | 居中面板,宽 `min(560px, calc(100vw - 32px))`,内衬 `24px`;**只有一个可见关闭出口**(右上 ×);遮罩与 `Esc` 也可关,但不计为可见出口 | 满足 Gate-3「可见关闭出口唯一」 | + +### 2.4 交互清单(唯一交互真相源 · 四列) + +**通用规则**(适用于下面所有浮层):每个浮层**只有一个可见关闭出口**(右上 ×,ID `X-close`);遮罩点击(`X-mask`)与 `Esc` 也能关,但**不视为可见出口**;关闭后焦点回到触发它的那个按钮,Tab 只在层内循环。下表不逐浮层重复这三条。 + +| ID | 元素 | 触发 | 反馈 | 何时不可点 | +|---|---|---|---|---| +| G-05 | 侧栏七个功能项(一层七项,一项一页;⛔ 无组标、⛔ 无第二层) | 点击 | 切到该页(hash 变、主区重绘);当前项转整块浅紫底 + `--accent-text` + 600 | 从不可点 | +| G-06 | 顶栏「随手记」 | 点击 | 打开随手记浮层,焦点进输入框 | 从不可点 | +| G-08 | 两处「假设」徽章(P1 页头 / P7「商单与收支」块头) | 点击 | 打开假设浮层(逐条给复核人 / 时机 / 落点) | 从不可点 | +| X-close | 各浮层右上 × | 点击 | 关闭浮层;焦点回触发它的按钮 | 从不可点 | +| X-mask | 浮层遮罩(层外空白区) | 点击 | 关闭浮层;焦点回触发它的按钮 | 没有浮层时不渲染 | +| SP-01…SP-07 | 各页**页面操作区**的页面级操作(刷新本页数据) | 点击 | 提示「已刷新本页数据」;不改数据 | 从不可点 | +| STATE-NORMAL | 状态面板 ·「回到正常内容」 | 点击 | 该页回 `ok` 态,主操作恢复 | 仅在非 `ok` 态出现 | +| STATE-RETRY | 出错态 ·「重试一次」 | 点击 | 提示已重试(示意);不改数据 | 仅在 `error` 态出现 | +| STATE-GO | 空态 ·「去〈某页〉」 | 点击 | 跳到该页;面板关 | 仅在 `empty` 态且该页定义了去处时出现 | +| R-01 | 随手记浮层 · 输入框 | 输入 | 内容非空时「保存」由禁用转可用 | 从不可点(可输入) | +| R-02 | 随手记浮层 · 保存 | 点击 | 写入选题库「待做」;提示 1.5s 后消失;浮层关闭 | 输入为空时 `:disabled` | +| R-03 | 随手记浮层 · 取消 | 点击 | 关闭,不写入;焦点回触发按钮 | 从不可点 | +| A-01 | 假设浮层 · 两处假设条目 | 展示 | 只读,逐条给复核人 / 时机 / 落点 | 不适用(只读,非控件) | +| P1-01 | 今日待处理项(每条) | 点击 | 跳到该待办所属的页(选题类→P2、在写→P4、待审→P5、待复盘→P7、待核销→P7 的记录区) | 从不可点 | +| P1-02 | 账号矩阵行名 | 点击 | 跳到 P6 并选中该账号(传 `accountId`) | 从不可点 | +| P1-03 | 账号矩阵行 ·「看复盘」 | 点击 | 跳到 P7 并选中该账号的待复盘内容(传 `accountId`) | 该账号没有可复盘内容时禁用 | +| P1-04 | 异常值提示条目 | 点击 | 跳到 P2 并带 `filter=异常值` 定位(传 `benchmarkId`) | 无异常值时整块显示空态 | +| P1-05 | 本月最好的一条 | 点击 | 跳到 P7 的该条复盘 | 无数据时禁用 | +| P1-06 | 全局检索 · 输入框 | 输入 | 结果列表按关键字过滤;无结果显示空态行 | 从不可点(可输入) | +| P1-07 | 全局检索 · 结果项 | 点击 | 跳到该结果所属的页;关键字清空 | 无结果时不渲染可点项 | +| P2-01 | 监控概览 ·「低粉爆款」数 | 点击 | 筛选对标内容列表(只看爆款) | 数为 0 时禁用 | +| P2-02 | 监控概览 ·「异常值」数 | 点击 | 筛选对标内容列表(只看异常) | 数为 0 时禁用 | +| P2-03 | 对标内容行 ·「发起拆解」 | 点击 | 跳到 P3 并带 `benchmarkContentId`(预填原文与出处) | 从不可点 | +| P2-04 | 评论区洞察 · 展开/收起 | 点击 | 展开子区并开始抓取(显示抓取中) | 从不可点 | +| P2-05 | 评论区洞察 ·「抓取评论」 | 点击 | 进入抓取中 → 出候选选题列表 | 抓取中时禁用 | +| P2-06 | 候选选题 ·「采纳」 | 点击 | 该条进选题库「待做」;候选行标为已采纳 | 该条已采纳时禁用 | +| P2-07 | 候选选题 ·「忽略」 | 点击 | 候选行标为已忽略(可恢复) | 该条已忽略时禁用 | +| P2-08 | 选题库 · 分组 tab(待做/在写/已用) | 点击 | 列表切换成该组 | 从不可点 | +| P2-09 | 选题行 ·「转入创作」 | 点击 | 建/切当前 `Content` 并跳到 P4;选题转「在写」(流转 8) | 未选账号时禁用(行内说明) | +| P2-10 | 选题行 ·「拆解」 | 点击 | 跳到 P3 并把该选题当素材 | 从不可点 | +| P2-11 | 灵感速记 ·「记一条」 | 点击 | 打开随手记浮层(与 G-06 同一个层) | 从不可点 | +| P2-AUX | 辅助入口区 ·「开始创作」 | 点击 | 跳到 P4(不带条目,落在当前内容上) | 从不可点 | +| P3-01 | 分区切换 tab(角度/结构/开场白/标题) | 点击 | 条目列表换成该分区 | 从不可点 | +| P3-02 | 条目行 | 点击 | 右区显示单条详情(原文 / 出处 / 草稿标记) | 从不可点 | +| P3-03 | 单条详情 ·「入库」 | 点击 | 无出处条目被门禁挡并说明原因;有出处的转「已入库」 | **无出处或原文缺失时禁用**(门禁) | +| P3-04 | 引用入口 ·「引用到创作台」 | 点击 | 跳到 P4 并把该条目加进资产引用区(流转 9) | 从不可点 | +| P4-01 | 创作流程 · 七个环节(逐项) | 点击 | 切到该环节;只许回退到已完成的环节 | 未到达的后续环节禁用 | +| P4-02 | 当前环节工作区 · 内容输入框 | 输入 | 「开始这一步」由禁用转可用 | 从不可点(可输入) | +| P4-03 | 当前环节工作区 ·「开始这一步」 | 点击 | 生成中 → 产出写进「AI 产出与采纳」(⛔ 不进正文) | 输入为空时禁用 | +| P4-04 | 资产引用 ·「从资产库拿一条」 | 点击 | 展开选择器;选中后收进引用区并显示来源 | 资产库为空时禁用并说明 | +| P4-05 | 资产引用 ·「移除引用」 | 点击 | 从引用区移除该条 | 引用区为空时不渲染 | +| P4-06 | 「推进到下一环节」 | 点击 | 当前环节 +1;流程与工作区跟着变 | 文案与封面缺一、进检查态时禁用(封面缺只提示;F6 守卫) | +| P4-07 | AI 产出与采纳 ·「采纳」 | 点击 | 机器产出并入本环节正文 | 无未裁决产出时禁用 | +| P4-08 | AI 产出与采纳 ·「驳回」 | 点击 | 正文不变;产出标为已驳回 | 无未裁决产出时禁用 | +| P4-09 | AI 产出与采纳 ·「改后再用」 | 点击 | 保留人的版本;产出标为改后再用 | 无未裁决产出时禁用 | +| P4-10 | AI 产出与采纳 ·「中断生成」 | 点击 | 停掉本步生成 | 仅在生成中出现 | +| P4-11 | 版本管理 ·「按账号 × 平台展开」 | 点击 | 母版展开出多版本(每个版本绑一个账号 + 一个平台,F7) | 未到成稿态时禁用 | +| P4-12 | 版本管理 · 版本行「切为当前版」 | 点击 | 该版标为当前版;当前内容上下文的版本号跟着变(F8) | 该版已是当前版时禁用 | +| P4-13 | 录制卡片与画板 ·「生成卡片」 | 点击 | 成稿态生成一张卡片(F14) | 未到成稿态时禁用 | +| P4-14 | 录制卡片与画板 ·「同步到画板」 | 点击 | 卡片落到画板,可打开 | 还没有卡片时禁用 | +| P4-AUX | 辅助入口区 ·「查账号口径」 | 点击 | 跳到 P6 并选中当前账号(流转 11) | 从不可点 | +| PICK-ASSET | 资产选择器 · 单条 | 点击 | 收进引用区并显示来源;浮层关 | 已引用过的不渲染可点项 | +| P5-01 | 目标选择 · 展开/收起 | 点击 | 展开账号与平台多选 | 从不可点 | +| P5-02 | 目标选择 · 账号项 | 点击 | 勾选/取消;版本列表跟着增删一版 | 从不可点 | +| P5-03 | 目标选择 · 平台项 | 点击 | 勾选/取消;同上 | 从不可点 | +| P5-04 | 各版本 · 版本 tab(逐版) | 点击 | 右区换成该版内容 | 从不可点 | +| P5-05 | 版本内容编辑框 | 输入 | 「保存本版」由禁用转可用;标为「已改」 | 从不可点(可输入) | +| P5-06 | 版本内容 ·「保存本版」 | 点击 | 该版内容更新;检查结果跟着重算(回到未检) | 无改动时禁用 | +| P5-07 | 检查结果 ·「复检」 | 点击 | 检查中 → 出结论(硬拦 / 软劝 / 通过) | 检查中时禁用 | +| P5-08 | 「确认发布」 | 点击 | 打开二次确认浮层 | **有硬拦项时禁用**;无版本时禁用 | +| P5-09 | 二次确认 ·「确认发出」 | 点击 | 写发布记录(复盘页的记录区出现一条);提示成功(流转 14) | 从不可点 | +| P5-10 | 二次确认 ·「取消」 | 点击 | 关闭浮层,不发;焦点回触发按钮 | 从不可点 | +| P5-11 | 发布记录 · 记录行 | 点击 | 跳到 P7 并定位该记录 | 从不可点 | +| P6-01 | 账号列表项 | 点击 | 切换右区画像 | 从不可点 | +| P6-02 | 画像六维字段(6 个输入) | 输入 | 「保存画像」由禁用转可用 | 非本人负责账号时禁用(改由角色判定) | +| P6-03 | 「保存画像」 | 点击 | 保存成功提示;未保存时离开给提示 | 无改动时禁用 | +| P6-04 | 记忆条目 · 展开/收起 | 点击 | 展开记忆列表(只追加,不可编辑) | 从不可点 | +| P6-05 | 关联内容行 | 点击 | 跳到 P4 的该条内容 | 无关联内容时整块空态 | +| P7-01 | 待复盘项 | 点击 | 右区换成该条的表现数据 | 从不可点 | +| P7-02 | 表现数据 ·「手工录入」 | 点击 | 数据读不到时的降级入口,展开输入 | 数据已读到时不渲染 | +| P7-03 | 归因结论 · 文本 | 输入 | 「采纳这条归因」由禁用转可用 | 从不可点(可输入) | +| P7-04 | 确认与改判 ·「采纳这条归因」 | 点击 | `confirmed` 置真 ⇒ 「确认归因并回写」转可用(**前置开关**) | 归因为空时禁用 | +| P7-05 | 确认与改判 ·「驳回」 | 点击 | 标为已驳回;回写按钮保持禁用 | 归因为空时禁用 | +| P7-06 | 确认与改判 ·「改后再用」 | 点击 | 标为改后再用;回写按钮保持禁用 | 归因为空时禁用 | +| P7-07 | 回写目标提示 ·「确认归因并回写」 | 点击 | 回写到当前账号画像:记忆 +1;显示回写目标(流转 17) | **未采纳归因(`confirmed` 为假)或未选账号时禁用** | +| P7-08 | 历史复盘 · 展开/收起 | 点击 | 展开历史复盘结论 | 从不可点 | +| P7-09 | 发布记录行 | 点击 | 右区换成该条的对账详情 | 从不可点 | +| P7-10 | 单条溯源 · 展开/收起 | 点击 | 展开溯源:从记录回到内容与版本 | 从不可点 | +| P7-11 | 对账核对区 ·「核销」 | 点击 | 二次确认 → 该条标「已核销」 | 未选记录时禁用;记录未「已发布」时禁用 | +| P7-12 | 商单与收支 · 展开/收起 | 点击 | 展开收支条目(F12 标 `P2/Deferred`) | 从不可点 | +| CHECKOUT-OK | 核销二次确认 ·「确认核销」 | 点击 | 该条标「已核销」;提示成功;浮层关 | 从不可点 | +| CHECKOUT-CANCEL | 核销二次确认 ·「取消」 | 点击 | 关闭浮层,不核销;焦点回触发按钮 | 从不可点 | + +⚠️ **「可见关闭出口」与「决策型关闭」是两件事**:每个浮层的中性关闭出口只有一颗 ×(`X-close`),恰好 1 个;「取消」这类带决策语义的按钮也能关层,但它不是「找出口」用的,**单独登记**(`R-03` / `P5-10` / `CHECKOUT-CANCEL`)。⛔ 不把两类混成一个数。 + +**表外可点元素必须为 0** —— 自检里有一条逐集合做双向差集的检查(`#/selftest` 自动跑)。 + +⚠️ **`A-01` 不是控件**:它是假设浮层里的只读展示行,列出来是为了「假设有两处、逐条给复核人/时机/落点」这件事在清单里看得见 ⇒ **不进实现清单**(原型里的 `IMPL` 表),自检也不拿它去点。 + +⚠️ **V1 撤销的 7 个 ID 与 V2 再撤 5 个**:V1 撤 `G-01…G-04`(一级组)/`G-07`(账号切换器)/`G-09`(演示开关)/`G-11`(收起侧栏)。V2 因「功能入口」那一层整体撤销,再撤 `card()` 相关的 `data-page` 用法;因「全局检索」从浮层改为 P1 的业务板块,撤掉检索浮层与其 `S-01`/`S-02`(改由 `P1-06`/`P1-07` 承担)。⛔ 撤销一个 ID 时必须同时把它的 DOM 删掉,否则判据「页面上每个 `data-act` 都在清单里」会报红。 + +### 2.5 组件规格(来源:选定套既有组件族) + +| 组件 | 规格(具体值) | 来源 | +|---|---|---| +| 按钮 · 主档 | 高 `40px`,内衬 `12/20`,字号 `16px`,字重 `600`,圆角 `26px`,底 `--accent`,字 `--on-accent` | 选定套 `--btn-*`;字号 16 + 600 是**必须的**(`#FFFFFF` 压 `#9e4cff` 只有 4.26:1,须走大字线 3:1) | +| 按钮 · 次档 | 高 `40px`,内衬 `12/20`,字号 `14px`,字重 `500`,圆角 `26px`,底 `--surface`,描边 1px `--line`,字 `--ink` | 同族 | +| 按钮 · 弱档(文字) | 高 `32px`,内衬 `6/12`,字号 `14px`,圆角 `26px`,无底无描边,字 `--accent-text` | 同族 | +| 卡片 · 密卡 | 内衬 `16px`,圆角 `16px`,底 `--surface`,L1 阴影 | 同族 | +| 卡片 · 宽松卡 | 内衬 `24px`,圆角 `24px`,底 `--surface`,L2 阴影 | 同族 | +| 输入框 | 高 `36px`,内衬 `12/10`,圆角 `9px`,字号 `14px`,底 `--surface`,描边 1px `--line` | 同族 | +| 徽章 / 状态标 | 高 `22px`,内衬 `2/8`,字号 `12px`,圆角 `999px`,无描边,底为对应状态色 8% 叠加 | 同族 | +| 侧栏(`.sidebar`) | **圆角浮栏**:宽 `128px`、内衬 `8px`、圆角 `24px`、底色 `color-mix(in srgb, var(--ink) 5%, transparent)`、描边 `1px color-mix(in srgb, var(--ink) 12%, transparent)`;高度随内容、`align-self:center` 在 `128px` 列里垂直居中;品牌只留标记并居中(`.sidebar .brand-name` 隐藏) | 形态沿用选定套 `.app-sidebar`(圆角浮栏、淡底、淡描边);宽度按「最长项名 2 字 + 计数徽章 + 一指宽余量」定到 `128px`(V3 由 `184px` 收窄,理由见 §1.1 ⑤;几何不在样式库内) | +| 侧栏导航项(`.nav-item`) | 高 `40px`、内衬 `0/8`、圆角 `999px`、图标 `20px` + 名字 `14px/500`、图标与名字间距 `8px`;项间 `gap 2px`;hover 只换底色(`--tfast`),⛔ 不移位、⛔ 不加阴影 | 形态照选定套 `nav-item`(药丸、只换色);横排图标+名字,字号与全站正文同档(`14px`)。V3 把内衬由 `0/12` 收到 `0/8`,给 `128px` 栏让出宽度 | +| 侧栏当前项(`.nav-item.is-active`) | 整块浅紫底 `color-mix(in srgb, var(--accent) 10%, var(--paper))` + 字色 `--accent-text` + 字重 `600`(⛔ 不用单侧色条、⛔ 不用描边变黑) | 与 §1.1 ⑩ 第 6 条「选中态只有一套画法」一致 | +| 页面公共框架(`.page-shell` / `.page-shell-title` / `.page-shell-stats` / `.page-shell-ops` / `.page-shell-aux`) | 标题区:`h1` + 一行说明;统计区用 `.stat-item`(白底 + 1px `--line` + 圆角 `16px` + 内衬 `12/16`,值 `20px/600` + `tabular-nums`,标签 `12px` `--ink-mute`);操作区一行按钮靠右;辅助入口区最多一个入口。⛔ 这一层**不带 `.block` / 不带 `.block-head h2`** | 落 `2b` §四:它不算板块数、不参与功能归属、不占冻结计数 | +| 满宽表格(`.ds-table.tbl-dense`) | 容器 `.panel` + `.table-wrap`(`overflow-x:auto`);表头 `12px/600` `--ink-mute` + 下边框 1px `--line`;行内衬 `4/8`、行间 `border-top` 发丝线、单元格 `vertical-align:middle` + `nowrap` | 密度契约(一屏 ≥6 行)逼出来的紧凑档 | +| 栏内表(`.ds-table.tbl-side`) | 两栏**栏内**的列表:内衬同上,但 ⛔ **不套 `nowrap`** | 同上,只在窄栏里用 | +| 行级微按钮(`.btn-micro`) | 高 `22px`、内衬 `0/8`、字号 `12px`、圆角 `999px`、无底、字色 `--accent-text`、`:disabled` 时透明度 `.45`。⛔ 表格行里不许用 32px 的 `.btn-sm` | 同上 | +| 分段控件(`.seg` / `.seg-item`) | 容器 `gap 4px` + 可换行;项高 `32px`、内衬 `0/12`、圆角 `999px`、描边 1px `--line`、白底;选中项 `.is-on` =整块浅紫底 + `--accent-text` + 600 + 描边转 `--accent` | 选中态统一 | +| 表单字段(`.field`) | 字段块间距由 `.field + .field{ margin-top:16px }` 出 | 统一 | +| 表格当前行(`.cell-name.is-on`) | 当前行的行名转 `--accent-text`(选中态在表格里的落法,⛔ 不写内联 `color`) | 统一 | +| 两栏分栏(`.grid-main-side`) | 宽比 `1.35fr : .9fr`;左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列 | 沿用 | +| 图标(唯一出口 `navSvg(page,size)`) | `viewBox 24` / `fill:none` / `stroke:currentColor` / `stroke-width:2` / 圆头圆角;尺寸只有两个用法:侧栏 `20px`、`≤640px` 的 `16px`;颜色只有一处 `--accent-text`(当前项走 `currentColor`) | 沿用 | + +> 同屏主档按钮 ≤1(多步流程每步 ≤1):P1 无主档、P2/P3/P4/P5/P6/P7 各 1 个 ✅(P7 前后两半各有一个推进动作,但同屏只出当前上下文那一个) +> 实底底色 ≥2 种:主档 `--accent`、次档 `--surface`、状态标(ok/err/warn 三色 8% 叠加)✅ + +--- + +## 三、两处假设的显式标注(⛔ 不当已确认需求用) + +②段 `2b` §七 标了两处骨架受限(第 1 条 P1 形态 / 第 2 条 P7 第 10 板块「商单与收支」)。本轮**尚无用户结论** ⇒ 按②段给的默认读法做,并在本份与原型里显式标注: + +| # | 受影响处 | 假设内容 | 本轮默认读法 | 复核人 | 复核时机 | 结论落点 | +|---|---|---|---|---|---|---| +| 假设 1 | **P1 的形态** | 矩阵级视图是否真需要(1a 待复核第 5 条 + A1) | **按「需要矩阵级视图」做**:P1 = 矩阵总览,5 个板块全在。若复核为「不需要」,P1 降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换 | 主会话转用户 | ②段收口时一次性过 | `2b` §七 + §五 P1;本轮落 `ui/DESIGN.md` 本节 + 原型 P1 页头的「假设」徽章 | +| 假设 2 | **P7 后半段第 4 板块「商单与收支」**(原 P8 的第 4 板块) | 商单对账进不进第一版、收支口径是否内容级(1a 待复核第 6 条 + A3) | **按「进第一版但属 P2、可整块缺」做**:第 4 板块**渲染出来但标「可点入 + 假设」**,展开后给一句「本块依赖未复核项」。它前面那 3 块(发布记录/单条溯源/对账核对区)不受影响 | 主会话转用户 | 同上 | `2b` §七 + §五 P7;本轮落 `ui/DESIGN.md` 本节 + 原型 P7 后半段第 4 板块标题行的「假设」徽章 | + +**原型的兑现方式**:两处各在自己的**板块标题同行右侧**挂一个「假设」徽章,**徽章本身可点**(`G-08`)—— 点开后逐条给出复核人 / 时机 / 落点。⛔ 假设既没有被当已确认需求写死,也没有被编出答案。 + +--- + +## 四、Gate-1 方向门自检(硬闸,结果写在本份末尾) + +逐条结论在 §八(十七行,含本轮现取的实测依据);逐视口表在 §6.1。 + +--- + +## 五、缺口与证据边界(⛔ 不假装支持) + +1. **反 AI 味 / 无障碍 / 表单校验 / 动效纪律的逐项数值判据本次无供给来源** —— 这四项出自 §供给·工艺数值判据的**可选档**(`assets/open-design/craft/` 13 份),本轮未动用可选档 ⇒ ⛔ 不凭感觉编一套顶上。本段实际应用的是**默认档**判据:`execution-runbook.md` §3.3/§3.4 + `layouts-tooling.md` §5.5。 +2. **暗色主题本轮不做** —— 选定套的暗色与亮色是两套独立基线,规则是「要暗色就整套切」。⇒ 本轮只做亮色基线,⛔ 不与暗色混搭。 +3. **`--warn` 是本项目追加的第 14 个语义色** —— 选定套亮色基线只有 ok/err,无 warn;而②段 P5 要求软硬两种区分。追加值的对比度实测记在 §六。 +4. **`1c-用户画像.md` 是零访谈画像** —— 界面里凡涉及「角色能看什么」的判据都基于它,**不得对外说成基于用户调研**。 +5. **3c GPT 参考版本轮不做** —— 派活单明令「⛔ 不许再向外发送本项目内容」(第②棒曾把产品现状发到站外,属红线动作)⇒ 本轮**全部输入只看本地文件**,⛔ 不上传、不外发、不用站外模型服务。⇒ `3c` 的「让外部模型独立出一版」这一步本轮**按红线停做**,并在收尾明示「未取得参考版 ≠ 已通过」。这是**红线优先于流程**的处置,不是漏做。 +6. **窄视口实测下限与红档** —— 本轮取证走 CDP 声明式视口(`Emulation.setDeviceMetricsOverride`),实测到 `390×844`;逐视口表(§6.1)现含 `390×844` 一档,⛔ 不写「已测 375」这种没测过的。⚠️ **16 档里有 3 档不达标**:`560×900`(P1 5 行)、`500×844`(P1 3 行)、`390×844`(P1 0 行 + P2 5 行)。🔴 **V3 把侧栏由 `184px` 收窄到 `128px` 之后,这三档一格没变** —— 实测 P1 首行顶逐档与 V2 **完全相同**(`669 / 729 / 822px`),说明红来自「Page Shell 一层抬高了 P1 首行顶」+ 窄屏本身,**不来自侧栏宽度**。V2 当时把成因记作「侧栏加宽 + Page Shell」,本轮实测把前半句划掉:侧栏收窄 56px 对首行顶**没有任何影响**。是否动窄屏断点,仍待用户裁定。 +7. **规格核对只走本地已测值** —— §六 的实测值全部由 `#/selftest` 与 `_tools/` 现算,⛔ 不目测。上一版留档的两处遗留(`500×844` 一屏 −1 行、满宽表格与一屏 ≥6 行不可兼得)本轮**重测后如实登记**,⛔ 不靠改判据过关。 +8. **②段自身有一处内部不一致,本版按「板块清单」实现并登记** —— `2b` §五 P2 的板块清单把「灵感速记」列为第 5 块,而同页信息分档表把「灵感速记」标为「全局可达(框架层,不占板块)」。两者冲突。本版按**板块清单**(也是 §九 第 16 条 39 块加总的依据)实现 —— P2 按 5 块,灵感速记**算业务板块**;⛔ 没有静默择一,在此登记待②段收口时订正。 + +--- + +## 六、数值取证登记(自检 + 工具实测回填,⛔ 非目测) + +> 本表由 3b 阶段现算回填,数据源:`#/selftest`(DOM 取值 + 真实像素)+ `_tools/` 八个脚本。⛔ 一个数都不许拍脑袋。 +> **Gate-1 方向门的逐条结论 + 实测依据在 §八**(全文结尾,⛔ 不在这里再抄一遍)。 +> 此处只放一条 `DESIGN.md` 独有的登记:**逐视口表**(自检全文、20 条变异、三条反向变异、四条改动明细见 `ui/3b-实测记录.md`;两处冲突以 `3b-实测记录.md` 为准)。 + +### 6.1 逐视口表(16 档;契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1,⛔ 不分档) + +`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 9223 已有实例)。 + +| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 | +|---|---|---|---|---|---|---|---|---| +| 1440×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1280×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1024×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 1000×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 960×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 920×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 901×900 | 78/0 | 669px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 900×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 840×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 820×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 768×900 | 78/0 | 661px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 700×900 | 78/0 | 676px | 31px | 7 | 12 | 49px | 128×350 | ✅ | +| 640×900 | 78/0 | 714px | 31px | 6 | 11 | 49px | 640×53 横滚标签条 | ✅ | +| **560×900** | 77/**1** | 729px | 31px | **5** ❌ | 11 | 49px | 560×53 横滚标签条 | ❌ | +| **500×844** | 77/**1** | 729px | 31px | **3** ❌ | 8 | 49px | 500×53 横滚标签条 | ❌ | +| **390×844** | 76/**2** | 822px | 31px | **0** ❌ | **5** ❌ | 49px | 390×53 横滚标签条 | ❌ | + +**绿 13 档 / 红 3 档**(`run_viewports.py`:`逐视口:不达标 3 / 共 16`)。行距在所有档恒为 `31px`、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(669 → 822px)。 + +> 🔴 **V3 重测的结论(这一条的写法改过)**:V2 把这三档的成因记作「侧栏 `64 → 184px`(主区变窄)+ 新增 Page Shell」。本轮把侧栏**收窄到 `128px`** 之后重跑整表,P1 首行顶逐档**与 V2 完全相同**(`669 / 729 / 822px`,只有 `768×900` 一档由 `676 → 661px`)⇒ **侧栏宽度不是成因**,「主区变窄」这半句划掉。剩下的是 **Page Shell 一层把 P1 首行顶抬高**(P1 的页框架三件套共占 ~669px 的顶高,窄屏因主区变窄、表格列换行又再加一截)。 +> +> ⚠️ **`390×844` 能测 ≠ 达标**:它是契约要求留档的第二个视口,帧已出(PNG 尺寸当场比对通过),但 P1 装下 0 行、P2 只有 5 行。 + +--- + +## 七、修订记录 + +| 轮次 | 改了什么 | 为什么 | +|---|---|---| +| V2 初版(2026-10-09) | ①**导航**由「一层八项平铺」改回「3 个业务组 + 1 个跨组入口」,侧栏由 `64px` 药丸浮栏加宽到 `184px` 带组标圆角浮栏;②**新增页面公共框架(Page Shell)**一层(标题区/数据摘要区/页面操作区/辅助入口区),并写明三条硬规则(不计板块数、不参与功能归属、不占冻结计数);③**撤销「功能入口」那一层**(`.sect-nav` / `.data-cards` / `.data-card` 与 `card()` 全部删除);④**骨架按新版 39 块重排**:P4 由 5 → 6、P7 由 5 → 6、P2 第 3 块注明可点入子区;⑤**对象冻结**:每个业务板块带 `data-obj`;⑥P7「确认与改判」落为回写的**前置开关**(`confirmed` 为假时回写禁用);⑦P4 版本管理承担 F7/F8、录制卡片与画板承担 F14;⑧撤销检索浮层(全局检索改为 P1 业务板块) | 按新版 `2a`/`2b` 重做第 4 步。逐条依据:`2b` §三/§四/§一第 2 条+§九第 2 条/§九第 8–15 条/§五(39 块);`2a` §一第 2 条、§三 F7/F8/F14、F10 | +| V2 复核棒(2026-10-09) | ①新增 `3b-实测记录.md`(自检 77 项全文、变异 20/20、三条骨架反向变异、16 档逐视口、四条改动明细);②本份补 §6.1 逐视口表 + §八 Gate-1 加「实测依据」列;③`_tools/` 补齐到 8 个脚本(新增 `tab_close.py`,`cap.py`/`grab_selftest.py` 改单标签复用);④`_gate_shots/` 补到 17 张视口帧 | 第 4 步只差「闸门取证 + 台账上报」。⛔ **未重做界面**:原型仅动 4 处(自检重入死循环守卫 / 「功能入口层残留」判据改八页逐页查 / `hashchange` 守卫回退 + 注释 / `check_skeleton.py` 判据由「互为前缀」收紧为「剥注解后严格相等」),几何与骨架一格未动 | +| **V3 本轮(2026-10-09,用户令)** | ①**P8 记录与对账整页并入 P7 复盘台**:`pageP8` 删除、四个板块接进 `pageP7`、动作 ID 由 `P8-01…04` 改 `P7-09…12`、`FROZEN` 的 p7 由 6 块改 10 块、`PAGES` 由八页收成七页;②**导航压成一层七项**(首页/选题/创作/投放/复盘/账号/资产,资产排最后):删 `NAV_GROUPS`/`NAV_CROSS` 与 `.nav-group`/`.nav-group-label`/`.nav-cross` 及其 `≤640` 规则,改 `NAV` 数组 + `renderNav()`;③**侧栏由 `184px` 收窄到 `128px`**,侧栏品牌名隐藏(顶栏已写全称),`.nav-item` 内衬 `0/12 → 0/8`;④**功能 ↔ 板块一一对应**做成机检:`FN_HOME`(功能→归属页)+ `FN_MAP`(页→板块→功能)+ 自检 5b-3 双向查;⑤自检新增 **3a-0 页集合正好七页**、3a/3b 重写为「一层七项、零组标、项名与顺序照用户口径」;⑥`renderSelftest()` 的兜底分支改成**吐可读输出**(原来崩了就不带 `#selftest-out`,取证工具全瞎) | 按用户口径改导航层级与 P8 归属,并同步 `2a`/`2b` V3。逐条依据:`2b` §〇/§三/§五 P7/§六 第 6·14·18 条/§九;`2a` §二/§三 F12·F13/§四/§十。⚠️ 侧栏收窄是③段的判断(几何不在样式库内):`184px` 的唯一理由是容下组名,组名撤掉后该理由消失 ⇒ **可推翻,改一处 `--nav-w` 即回退** | + +--- + +## 八、Gate-1 方向门自检(硬闸) + +> 结论列=本轮(V3)的判定;**实测依据**列=本轮现取的证据(自检项名 / 脚本名 / 变异编号 / 实测像素),⛔ 不是目测。全量证据见 `ui/3b-实测记录.md`。 +> V3 比 V2 多两行(第 13、14 行):本轮的两条主判据(页集合与导航层级、功能 ↔ 板块一一对应)各自单列,⛔ 不并进邻行糊过去。 + +| # | 检查项 | 结论 | 依据 | 实测依据(2026-10-09 复核棒现取) | +|---|---|---|---|---| +| 1 | 设计契约十二字段 | ✅ 过 | §一 | 十二字段全填,无空、无「待定」;重复项逐页列了次级信息 | +| 1b | 页型判定 | ✅ 过 | §一 | 自检「工具型纪律:零 `.eyebrow` / 零 `.lead` / 零 `.hero`」PASS;「`@keyframes` 共 0 处」PASS | +| 2 | 结构骨架(翻译面) | ✅ 过 | §1.1 ⑤ | 骨架档=主区+侧区(给了理由);②段分档表每条信息都有落位(§1.2 逐页核对) | +| 2b | 骨架未漂 | ✅ 过 | §1.2 | `_tools/check_skeleton.py` 正向 PASS:七页 **39 块**与 `2b-界面布局-新版.md` §五 逐页逐位一致;自检「骨架冻结:七页 39 个板块…逐位一致」PASS;反向变异 **M4**(塞板块)/**M19**(改页标题)/**M22**(页面表多一页)各报红 | +| 3 | 状态覆盖 | ✅ 过 | §1.3 | 六态逐页有结论;自检「六态 × 七页 = 42 个组合全部渲染出内容」PASS;`disabled` 与 `无权限` 分开写 | +| 4 | 令牌表 | ✅ 过 | §2.2/§2.3 | 自检实测对比度:`--warn` 对 surface = 5.93:1、`--accent-text` = 4.76:1、`--ink-faint` = 3.55:1(三条均过契约) | +| 4b | 字阶定值表 | ✅ 过 | §2.3 | 七档各一个 px(12/14/16/18/20/24/30),相邻差 ≥2;自检实测**在用** 5 档:12/14/18/20/24 | +| 4c | 高度层级 | ✅ 过 | §2.3 | L1/L2/L3 每层 ≥2 层叠层;自检「无单层死黑重阴影」PASS | +| 4d | 布局脚手架 | ✅ 过 | §2.3 | 侧栏 `128px` + 主区 `minmax(0,1fr)`;自检实测 1440×900:侧栏 128×350px、顶栏 49px、主区 clientH 851 / scrollH 1435 | +| 5 | 组件规格 | ✅ 过 | §2.5 | 按钮三档+卡片两档+输入框+徽章均为具体值;自检「首屏同屏主档按钮 ≤1 个」PASS | +| 6 | 反 slop | ✅ 过 | §2.2 | 无紫→粉渐变;标题走展示体;强调色填充实测最高 0.52%(契约 ≤5%,在创作台) | +| 7 | 拒绝清单 | ✅ 过 | §1.1 ⑩ | 共 **8** 条,每条带可判定判据(≥3 ✅);其中第 6/7/8 条由自检「组件口径」「Page Shell」「辅助入口区」三条判据 + 变异 M15 看住 | +| 8 | token 引用完整性 | ✅ 过 | §2.1 | 三层结构;组件层只引语义层、语义层只引 primitive;无孤立 token | +| 9 | 分档兑现 | ✅ 过 | §1.2 | 常驻=零点击可见、可点入=一次点击可达;档位未被本段改动(P7 前后两半合页后逐条重核) | +| 10 | 供给核对 | ✅ 过 | §〇 | 选定套 `design-system-tiaoyue`,与上一版一致(沿用同一套) | +| 11 | 对象冻结(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内」PASS;变异 **M17** 报红 | +| 12 | Page Shell 不占板块(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页各恰好 1 个,且都不带 `.block` / 不带 `.block-head h2`」PASS;逐页 `.block` 数 = `FROZEN` | +| 13 | 页集合与导航层级(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检「页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8)」PASS +「导航一层七项…零组标 / 零跨组线」PASS +「导航七项与用户口径逐字一致、顺序相同…(资产排最后)」PASS;变异 **M21**(塞回组标)/**M22**(P8 复活)/**M16**(项名漂移)各报红 | +| 14 | 功能 ↔ 板块一一对应(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检 5b-3「功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立)」PASS;变异 **M23**(归属漂移)/**M24**(悬空功能)各报红 | + +⇒ **Gate-1 十九行全过。** 唯一未达线的是**密度契约**(窄屏三档:560×900 / 500×844 / 390×844),它属 3b 实测的登记项、⛔ 不属 Gate-1 门 —— 见 §6.1 与 `3b-实测记录.md` §八。 + +--- + +*本份是原型的绑定规范:原型只许引本份登记的 token。* + +## 九、说人话自评(本轮改动的文字部分;判据源 `humanizer-zh`,五维各 10 分) + +| 维度 | 分 | 说明 | +|---|---|---| +| 直接性 | 9 | §1.1 ⑤ 第一句就说「V3 由 184px 收窄到 128px,相对 V2 是一处显式改动」,并当场给出可推翻的办法 | +| 节奏 | 8 | 本份天生是规范体裁(表格为主),改动段落已补叙述,⚠️ 弱项 | +| 信任度 | 10 | 把 V2 记的成因当场划掉并给出重测数(P1 首行顶逐档相同);崩掉两次的 M22 如实写进工具注释与 `3b` 实测记录,⛔ 不把返工藏起来 | +| 真实性 | 9 | Gate-1 每行都挂了本轮现取的证据(判据名 / 变异编号 / 实测像素);一处数字订正(板块总数 39 而非 41)也留在实测记录里 | +| 精炼度 | 9 | Gate-1 只在本份出现一次,§6.1 只放逐视口表、不重抄结论 | +| **总分** | **45 / 50** | 门槛 ≥45 ⇒ 压线过;扣分点仍全在「节奏」这一行(规范体裁,叙述段天然少) | + +> 全量实测与四条改动的现象/根因/证据见 `ui/3b-实测记录.md`(该份自评 46/50)。 diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__071c5b.html b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__071c5b.html new file mode 100644 index 0000000..3478653 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__071c5b.html @@ -0,0 +1,1706 @@ +<!doctype html> +<html lang="zh-CN" data-theme="light"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>MCN 短视频整合营销工作台 · 可点通原型 V2 + + + +
+ +
+
+ MCN 短视频整合营销工作台 +
+ + +
+
+
+
+
+ + + + diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__d85687.html b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__d85687.html new file mode 100644 index 0000000..17e8e5d --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__d85687.html @@ -0,0 +1,2559 @@ + + + + + +MCN 短视频整合营销工作台 · 可点通原型 + + + +
+ +
+
+ MCN 短视频整合营销工作台 +
+ + +
+
+
+
+
+ + + + + + diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fa6e07.html b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fa6e07.html new file mode 100644 index 0000000..c52bed9 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fa6e07.html @@ -0,0 +1,1820 @@ + + + + + +MCN 短视频整合营销工作台 · 可点通原型 V2 + + + +
+ +
+
+ MCN 短视频整合营销工作台 +
+ + +
+
+
+
+
+ + + + diff --git a/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fc471a.html b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fc471a.html new file mode 100644 index 0000000..13da588 --- /dev/null +++ b/docs/pm/mcn-shortvideo-agent/归档-过期版/mcn-workbench__fc471a.html @@ -0,0 +1,1775 @@ + + + + + +MCN 短视频整合营销工作台 · 可点通原型 V2 + + + +
+ +
+
+ MCN 短视频整合营销工作台 +
+ + +
+
+
+
+
+ + + + diff --git a/docs/pm/mcn-shortvideo-agent/索引-当前权威版.md b/docs/pm/mcn-shortvideo-agent/索引-当前权威版.md index f57135c..05e3472 100644 --- a/docs/pm/mcn-shortvideo-agent/索引-当前权威版.md +++ b/docs/pm/mcn-shortvideo-agent/索引-当前权威版.md @@ -1,56 +1,65 @@ # 索引 · 当前权威版(MCN 短视频整合营销工作台) > **这份文件回答一个问题:某个文档的「现在能用那一版」在哪。** -> 用途:后续按方案细化产品界面时,**只读这里指向的文件**,⛔ 不去 `执行会话/` 里翻。 -> 🔴 维护时机:**每个目标收口(判「已完成」)时更新一次** —— 由收口的那一轮负责补这一节。 -> ⚠️ 本索引是**指针**,不是副本:⛔ 不改被指向的文件。被指向的文件一旦过时,改的是这里的那一行。 -> 🕒 本版更新时间:2026-10-11 19:55(主会话核实后手建;当时**没有**单一入口,产品文档有 4 个版本散在 4 个目标目录里) +> 🔴 **规矩(2026-10-11 用户令)**:**当前文档统一放方案文件夹;过期文档统一放归档文件夹。** +> · **方案文件夹** = `docs/pm/mcn-shortvideo-agent/`(本目录)—— 下面 `research/` `prd/` `ui/` `专题/` 里放的全是**当前权威版**。 +> · **归档文件夹** = 本目录下的 `归档-过期版/` —— 被顶替的旧版全在那里,命名 `<原名>__<来源目标短哈希>.<扩展名>`。 +> · **执行区** `执行会话/目标-*/` = **过程留痕**(含台账引用的原始产物),⛔ 不作为查方案的地方。 +> 🕒 本版更新:2026-10-11 20:2x(整理完成时) --- -## 一、①段 产品需求 +## 一、①段 · 产品需求(`research/`) -| 文档 | 当前权威版 | 日期 | 备注 | +| 文档 | 文件 | 大小 | 日期 | |---|---|---|---| -| 1a 需求文档 | `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1a-需求文档-MCN短视频整合营销.md`(23 348 B) | 10-07 22:29 | ⚠️ **10-07 之后没再更新过**,全球口径未落进去 | -| 1b 竞品分析 | `执行会话/目标-重写5份竞品分析文档并重新生成MCN短视-72111e/1b-竞品分析-汇总对比体.md`(33 401 B) | 10-07 22:29 | 同上 | +| 1a 需求文档 | `research/1a-需求文档.md` | 24 317 B | 10-08 | +| 1b 竞品分析 | `research/1b-竞品分析.md` | 33 401 B | 10-07 | -## 二、②段 产品功能(`2a`) +⚠️ `1b-竞品分析.md` 的原名是 `1b-竞品分析-汇总对比体.md` —— 改成标准名是为了过①段产出白名单闸门(该段只许 `1a`~`1e` 五个标准名),内容一字未动。 -| 文档 | 当前权威版 | 日期 | 备注 | +⚠️ 两份都是 10-07/10-08 的版本,**全球口径还没落进去**(平台矩阵与海外热点源见 §四 专题)。 + +## 二、②段 · 产品功能(`prd/`) + +| 文档 | 文件 | 大小 | 日期 | 版本 | +|---|---|---|---|---| +| 2a 产品功能 | `prd/2a-产品功能.md` | 61 683 B | 10-10 | V5 | +| 2b 界面布局 | `prd/2b-界面布局.md` | 52 643 B | 10-10 | V5 | + +🔴 旧版(V4/V3/更早)都在 `归档-过期版/`,**别再用**:`2a` 有 5 个旧版(`fa6e07`/`fc471a`/`071c5b`/`d85687`/`72111e`),`2b` 有 6 个。 + +## 三、③段 · 界面交互(`ui/`) + +| 文档 | 文件 | 大小 | 日期 | |---|---|---|---| -| 2a 产品功能 | `执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/2a-产品功能-新版.md`(61 683 B) | 10-10 23:14 | ⚠️ 与 `fa6e07` 那份**字节数相同**(是副本)⇒ 认这份 | -| 2b 界面布局 | `执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/2b-界面布局-新版.md`(52 643 B) | 10-10 23:22 | **V5**(侧栏 64px + 刷新 icon 改动后)⇒ 比 `fa6e07` 的 52 256 B(V4)新 | +| 原型 | `ui/mcn-workbench.html` | 153 410 B | 10-10 | +| 设计规范 | `ui/DESIGN.md` | 66 210 B | 10-10 | +| 实测记录 | `ui/3b-实测记录.md` | 32 210 B | 10-10 | -🔴 **旧版(⛔ 别再用)**:`fc471a`(10-09,`2a` 43 328 B/`2b` 40 119 B)|`071c5b`(10-09,`2a` 40 917 B/`2b` 37 846 B)。 +## 四、专题方案(`专题/`) -## 三、③段 界面交互 +| 专题 | 文件 | 大小 | +|---|---|---| +| 全球平台矩阵(海外 6 + 国内 6) | `专题/全球平台矩阵.md` | 9 229 B | +| 海外热点源查证(验通 9/没拿到 6) | `专题/海外热点源-查证.md` | 13 986 B | +| 热点与选题 · 功能细节(四问落到字段与算法) | `专题/热点与选题-功能细节.md` | 39 743 B | +| 产品框图 · 全球版 | `专题/产品框图-热点与选题-全球版.html` | 35 223 B | +| 功能流程图 · 全球版 | `专题/功能流程图-热点到选题-全球版.html` | 22 198 B | +| Easel 逆向(热点雷达与选题链路) | `专题/Easel逆向-热点雷达与选题链路.md` | 15 456 B | +| 热点与选题 · 逻辑关系(**国内口径**,已被全球版接续) | `专题/热点与选题-逻辑关系-国内口径-已被全球版接续.md` | 12 250 B | +| GPT 建议 · 页面结构与操作路径 | `专题/GPT建议-页面结构与操作路径.md` | 55 978 B | +| GPT 建议 · 热点与选题细节 | `专题/GPT建议-热点与选题细节.md` | 44 524 B | -| 文档 | 当前权威版 | 日期 | 备注 | -|---|---|---|---| -| 原型 | `执行会话/目标-侧栏改回64px基准形态并刷新按钮改ic-20a8ac/ui/mcn-workbench.html`(153 410 B) | 10-10 23:17 | V5 | -| DESIGN.md | 同上目录 `ui/DESIGN.md`(66 210 B) | 10-10 23:26 | V5 | -| 实测记录 | 同上目录 `ui/3b-实测记录.md`(32 210 B) | 10-10 23:28 | V5 | +## 五、归档文件夹怎么用(`归档-过期版/`) -## 四、专题方案(跨段,按需引用) +- 命名规则:`<原名>__<来源目标短哈希>.<扩展名>`,例 `2b-界面布局-新版__fc471a.md` = 来自目标目录 `…-fc471a` 的那一版。 +- 现在 28 份:`2a` 5 版 / `2b` 6 版 / 原型 4 版 / `DESIGN` 4 版 / 实测记录 4 版 / `1a` 3 版 / 早期 prd 与 research 的旧归档 3 份。 +- 需要「这版当时为什么这么定」时来这里翻;**做产品只看 §一~§四**。 -| 专题 | 当前权威版 | 日期 | 备注 | -|---|---|---|---| -| 热点与选题 · 功能细节 | `执行会话/目标-征询GPT对选题板块细节的建议并重画框图-8a649c/热点与选题-功能细节-2026-10-11.md`(39 743 B) | 10-11 17:02 | 四问(来源/分类/热度/展示)落到字段名与算法 | -| 全球平台矩阵 | `执行会话/目标-按全球口径重做平台矩阵与热点源含海外主流-39646d/全球平台矩阵-2026-10-11.md`(9 229 B) | 10-11 19:20 | 海外 6 + 国内 6,共 12 | -| 海外热点源查证 | 同上目录 `海外热点源-查证-2026-10-11.md`(13 986 B) | 10-11 19:22 | 验通 9 条/没拿到 6 条(如实登记) | -| 产品框图(全球版) | 同上目录 `产品框图-热点与选题-全球版-2026-10-11.html`(35 223 B) | 10-11 19:27 | 116 个文本节点 | -| 功能流程图(全球版) | 同上目录 `功能流程图-热点到选题-全球版-2026-10-11.html`(22 198 B) | 10-11 19:25 | — | -| Easel 逆向(热点雷达与选题链路) | `执行会话/目标-逆向Easel热点雷达与选题链路补齐现版-547748/第1棒_逆向Easel热点雷达与选题链路_2026-10-10.md`(15 456 B) | 10-10 22:54 | 原始素材,`取证/` 12 份在其目录 | -| 热点与选题 · 逻辑关系(**国内口径,已被全球版接续**) | `执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/逻辑关系-热点与选题-2026-10-11.md`(12 250 B) | 10-11 04:12 | 引用历史判断时看它,做题看全球版 | -| GPT 建议 · 页面结构与操作路径 | `执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/GPT-对页面结构与操作路径的建议.md`(55 978 B) | 10-09 16:25 | 🔴 内含 D1 待裁定项 | -| GPT 建议 · 热点与选题细节 | `执行会话/目标-征询GPT对选题板块细节的建议并重画框图-8a649c/GPT-对热点与选题板块细节的建议.md`(44 524 B) | 10-11 17:01 | — | +## 六、维护规则(每个目标收口时做) ---- - -## 五、已知的断链(⛔ 本索引治不了,要机制层改) - -- `docs/pm/mcn-shortvideo-agent/prd/` 里 10-10 22:24 归档的那两份**是旧版**(`2b` 是 V4,52 256 B)⇒ ⚠️ **别把它当权威区**,它落后于本索引第二节指向的版本。 -- `docs/pm/mcn-shortvideo-agent/research/` **是空的** —— ①段落的调研文档一份都没归档。 -- `交付物/` 也是空的。 -- ⇒ 根因:机制定的是「执行期落 `执行会话/目标-*/`,主会话收口后统一搬进 `docs/pm/…/`」,但**归档只做过一次**(10-10 22:24),之后 `20a8ac`/`8a649c`/`0a758b`/`39646d` 四个目标的产物都没搬 ⇒ **归档区落后,执行区堆积**。 +1、本目标产出的权威文档 → **覆盖**方案文件夹里对应的那一份(`2a`/`2b`/原型/`DESIGN` 等)。 +2、被顶替下来的那一版 → **移进** `归档-过期版/`,按上面的命名规则补上来源哈希。 +3、回到本文件,把 §一~§四 对应行的**大小与日期更新成新的**。 +4、执行区 `执行会话/目标-*/` 里的原件**留着不动**(台账 `artifact` 指的就是那里,是过程留痕)。