目标已完成核实(三判据全过/闸门现跑/逐视口3档红登记)+ 收口搬运②段两份到 docs/pm/prd/ + 订正机读副本判据措辞

This commit is contained in:
WorkBuddy committed 2026-10-10 22:25:02 +08:00
1 parent b30e48c1fc
commit f536a0c201
10 files changed
+1316 -19

No files matched your search

+98
View File
@@ -86,3 +86,101 @@
8、**F7 展开单位改平台账号 + F13 补「一版一路」**(`PublishRecord` 不加渠道字段)。 8、**F7 展开单位改平台账号 + F13 补「一版一路」**(`PublishRecord` 不加渠道字段)。
**挂起项**:**定时发布** —— 记在目标 why 与队列里,等做投放功能时再议。 **挂起项**:**定时发布** —— 记在目标 why 与队列里,等做投放功能时再议。
## 22:23 · 核实目标完成情况(用户问「目标完成情况如何」)
**目标「把八条已定口径落进②段两份与原型」= 已完成** ✅ —— `lifecycle=已完成`,**三条判据全过**(检查会话逐条真核过)。
**过程**:主棒 `d7ea834b`(08:23 上报 done)只交付产物、**没写 `目标执行状态.md`**、也没把验收结论写回机读副本 ⇒ 补齐棒 `6f6cd256`(09:1x)按文档合同补上,**核完三条全过 ⇒ 该棒零改动**(2a/2b/原型/DESIGN/实测记录一个字未动)。
**五道闸门现跑**(⛔ 一个数不沿用书面值):`check_js` PASS / 骨架冻结 **七页 39 块** PASS / 自检 **PASS 78 / FAIL 0** / 变异 **24/24** / 逐视口 16 档整表重跑 **不达标 3**(窄屏三档,已登记、不阻断)。
🔴 **变异对照有效**:M16(首项改「首业」)与 M21(塞回 `.nav-group`)**两条报红落在同一判据** ⇒ 那条判据不是恒绿。**"报红"在这里是好事**(判据真在工作),别读成缺陷。
**产物**(`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/`):`2a-产品功能-新版.md` 61 683 B / `2b-界面布局-新版.md` 52 256 B / `ui/mcn-workbench.html` **149 047 B**(V4)/ `ui/DESIGN.md` 63 411 B / `ui/3b-实测记录.md` 28 703 B。
**八条口径落成了什么**(`2b` 行 4/17/21-22/30-31 逐字):P2 由 5 块收成 4 块(「灵感速记」并进「选题库」)/ P6 由 4 → 5 块(画像六维 → **画像五维** + 新增**平台账号**块,带平台+登录态+授权状态)/ 投放页目标选择改**两级**(先内容账号、再勾平台账号)/ 业务板块总数**仍 39**(一减一加,净变化 0)。
**本轮主会话自决做的两件**:
1、**订正机读副本判据的措辞**(检查会话指出但按规矩未擅改):原写「账号画像六维」⇒ 改成「画像五维 + 平台账号块」,与②段实际一致。
🔴 **顺带踩到第二个 kpi 坑**:`goalctl declare --kpi` 的判据文本里**不能出现全角分号/括号/斜杠** —— 第一次写 `(…;…/…)`,工具把它们当**分隔符切碎**,中间两段被吃掉(只剩带 `=` 的碎片被当成判据)。改用**最简文本**重设才成功。⚠️ 与 10-09 那个"等号必须半角"是同一族的坑:**判据文本只用最朴素的字符**。
2、**收口搬运**:②段两份归档到 `docs/pm/mcn-shortvideo-agent/prd/`(该目录新建),归档名去掉"新版"= `2a-产品功能.md`/`2b-界面布局.md`;⛔ 源文件保留(零删除)。
**遗留 8 条**(检查会话写在 `目标执行状态.md` §四),其中**要用户裁定**的三条:窄屏三档密度红(是否动断点)/ P7 一页两个主操作(是否再议)/ 两处假设(P1 形态、P7 第 10 块「商单与收支」是否进第一版)。
## 07:4x–08:0x · TrendRadar 接入智谱 GLM(模型 `glm-5.3-flash`,用户指定「思维链要较低档」)
部署位置(承 10-09 那次):源码 `E:/ProgramData/AIProject/trendradar`,容器 `trendradar`(8080) / `trendradar-mcp`(3333)。
- **配置落点(已生效并验证)**:`docker/.env` = `AI_ANALYSIS_ENABLED=true`|`AI_API_KEY=<智谱 key>`|`AI_MODEL=openai/glm-5.3-flash`|`AI_API_BASE=https://open.bigmodel.cn/api/paas/v4`。智谱走 OpenAI 兼容端点 ⇒ 模型名**必须带 `openai/` 前缀**(项目 config.yaml 注释里写了这条规则)。`config/config.yaml` 的 ai 段:`max_tokens` 5000 → **16000**,新增 `extra_params.extra_body.thinking = {type: enabled, level: low}`。
- 🔴 **智谱 GLM-5 系列三条硬事实(实测可复用)**:① **不能关思考**,传 `{"type":"disabled"}` 或 `{"type":"low"}` 都报 `code 1210`,原文「该模型始终思考,不支持关闭思考;请使用 low、high 或 max」。② **低档只有一种写法**:`{"type":"enabled","level":"low"}`;只写 `{"level":"low"}` 或加 `effort`/`budget` **不报错但不生效**(服务端忽略未知键,reasoning_tokens 与默认持平)—— 判据看 `usage.completion_tokens_details.reasoning_tokens`。③ **litellm 透传私有参数唯一通道是 `extra_body`**:直接 `completion(thinking={...})` 抛 `UnsupportedParamsError: openai does not support parameters: ['thinking']`;改 `extra_body={"thinking":{...}}` 才生效 —— 同一样本 reason_tokens **969 → 236**、总耗 1511 → 724。
- 🔴 **「AI 返回空响应」的真因不是 key 错,是思维链吃光预算**:`client.chat()` 取 `choices[0].message.content`,为 None 就返回 `""` ⇒ analyzer 记空响应(`trendradar/ai/analyzer.py:562`)。实测真实体量(150 条 + 官方 prompt)在 **low 档下 reason 仍要 3557 token**、total 4074,逼近 5000 上限 ⇒ 数据再大就 `finish_reason=length`、回答被截空。**「降档」与「放宽预算」必须一起做**,只降档不提预算照样失败(已实证一轮)。
- **对项目源码的一处改动(第三方项目,改动处已写中文注释)**:该项目的 `ai.extra_params` 是**读了不用的死配置** —— `trendradar/core/loader.py:273` 读进 `EXTRA_PARAMS`,`trendradar/ai/client.py` 从不消费 ⇒ 光改配置不生效。改 client.py 两处:`__init__` 增 `self.extra_params`,`chat()` 里把 `extra_body` 合并进 `params["extra_body"]`、其余键按原「只补不覆盖」并入。
- 🔴 **让改动进容器靠挂载覆盖,不改镜像**:`docker/docker-compose.yml` 的 trendradar 服务 volumes 增 `../trendradar:/app/trendradar:ro`;验证=容器内 `trendradar.__file__` 为 `/app/trendradar/__init__.py`。好处=官方镜像照常 pull 升级,本地补丁仍在。
- ⚠️ **改挂载进来的配置文件不会触发 recreate**:只改 `config.yaml`/`.env` 后 `docker compose up -d` 显示 `Running` 而非 `Recreated`,容器仍跑旧值(日志里 `max_tokens` 一直是 5000,白等一轮)⇒ 必须 `docker compose up -d --force-recreate trendradar`。
- **验证**:日志 `[AI] max_tokens=16000` → **`[AI] 分析完成`**,翻译 7/7 成功;报告 `output/html/2026-10-10/08-02.html` 152 136 B(无 AI 的旧版 147 871 B),含 6 处「AI 分析」字样 ⇒ 内容真写进去了。
- **遗留**:雅虎财经 RSS 源 404(官方默认源,非本次引起);未拍板=要不要把 `ai_analysis.max_news_for_analysis` 从 150 降到 80(减思考量省钱,代价是报告覆盖的新闻变少)。
## 08:02–08:2x · 执行棒交付「把八条已定口径落进②段两份与原型」(sid `d7ea834b`)
落点 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/`(起点=`fc471a` 只读,md5 复核未被改)。上报 `--state done`,域锁 `[执行]-[产品规划]-把八条口径落进②段与原型` 已 `--release-exec` 释放(实测锁库已空)。
**八条口径 → 落点(逐条可对)**:
1、一类事情放同一页面 → `2a` §一 第 2 条整条重写 + 七页复核表(**页集合一个没动**);
2、资产入库不限页 → `2a` §二 `Asset` 产生位置改「P2/P3/P4 均可」+ `2b` P3 职责改「统一管理」+ P2 对标内容写明可就地入库;
3、选题库分类 → `2b` P2 新增「**进度 × 类型**两个正交维度」(类型=选题/对标线索/评论洞察/数据异动/灵感;随手记默认落「灵感·待做」);
4、记录与对账属复盘 → `2b` P7 十块**平铺不划子区** + 写死属「发布之后看数据与看收入」;
5、一条内容对多渠道 → `2a` `PublishTask` 定义改「含**发布渠道**」;`2b` P5 摘要区改「目标渠道数/覆盖平台数」;
6、账号两概念 → `2a` `Account` 改「**内容账号**」+ 新增「平台账号」五条说明(子项、不进表、不进计数、不加对象);`2b` P6 画像**五维** + 新增「平台账号」块;
7、投放页两级目标选择 → `2b` P5 第 1 块写清「先内容账号 → 再勾它的平台账号」;
8、F7 展开单位/F13 一版一路 → `2a` F7 改名 + F13 补「一版一路」(`PublishRecord` 不加渠道字段)。
**骨架账**:P2 5→4 块(「灵感速记」并进选题库,⚠️**顺手订正 V3 遗留的板块清单 ↔ 分档表打架**)、P6 4→5 块(新增平台账号)⇒ **总数仍 39**(逐页 5/4/4/6/5/5/10)。页数、导航一层七项、流转 20 条、令牌与几何**一格未动**。
**原型三条真改动**:① `S.targets:{accounts,platforms}` → `{accounts,channels}` + 新增 `PLATS` 数据;② 交互清单 88→90 个 ID(**撤 `P2-11`**,增 `P2-12`/`P6-06`/`P6-07`);③ `PROFILES` 删 `平台` 字段。
**闸门实测(全过)**:骨架 `PASS`(`check_skeleton.py`)|自检 `78/0`(全文存 `_scratch/selftest-v4-1440.txt`)|变异 `24/24`(存 `_scratch/mutate-v4.txt`)|逐视口 16 档 `不达标 3/16`(**整表重跑,逐格与 V3 完全相同**——本轮改的是 P2 选题库/P5/P6,没碰被量的 P1 与 P2 对标内容)|命名 `2060|0|27`。另做骨架闸门**四条反向变异**(板块名/数/顺序/再命名,改 2b 副本 ⇒ 全报红,验完还原)。
**必记两条**:
- 🔴 **改骨架两侧必须同步**:`2b` §五 板块清单与原型 `FROZEN` 是**双写**,任一侧改了另一侧不改 ⇒ `check_skeleton.py` 报红;**改完两侧都要跑一次**。
- 🔴 **「撤 ID」必须同时删 DOM**:撤 `P2-11` 若只删 IMPL 不删按钮 ⇒ 自检「页面上每个 data-act 都在清单里」报红;反之只删 DOM 不删 IMPL ⇒ 「声明了但页面里没有」报红。**两个方向各有一条判据盯着**。
**遗留待裁定(已登记,⛔ 未擅自动手)**:窄屏三档密度红(`560/500/390`,与侧栏宽度无关,成因=Page Shell 抬首行顶);「满宽表格」与「一屏 ≥6 行」窄屏不可兼得;P7 一页两主操作;P1 形态与 P7「商单与收支」两处假设仍未获用户结论;目标目录名全称 vs `title[:20]` 口径分歧(沿用)。
## 08:30 · 检查棒第 43 棒:判「八条口径」目标完成度 ⇒ **判不出来,已停手**
- 🔴 **唯一阻塞**:`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/` 下**没有 `目标执行状态.md`**(实测该目录只有 `2a-产品功能-新版.md`、`2b-界面布局-新版.md`)。派活单把这份文档定为「判断目标状态的唯一依据」,并写明「读不到 ⇒ 判不出来并停手,⛔ 不许去别处找」⇒ 本棒照办:**未派活、未改 `lifecycle`、未改 `acceptance_state`**。
- **机制侧三处漂移(本棒实测,未改)**:① 工作区根 `state.py` **不存在**(派活单第 1 项读不到);② `tmp/supervise-inbox/taskgraph.json` **不存在**(第 3 项读不到);③ `goal.json.execution_doc` 换目标后**仍指着上一目标 `0ec0a7` 的文档**(上一棒已在旧文档里写「本目录此前没有状态文档,由检查会话补上」⇒ 同型缺口在新目标上又出现一次)。
- **其余输入**:`tasks.json` 台账 20 条全 `done`|`goal.json.acceptance_state` 三条仍停在 `未过`(`declared_at 07:57`,早于执行棒 08:2x 交付 ⇒ 与文档口径不同步,本棒未采信、也未回写)|`collabd.py --domain-status` = 无人持域锁。
- ⚠️ **下一棒的坑**:文档若仍缺失 ⇒ 第 44 棒会得出同一个「判不出来」,目标一直停在「进行中」。要破这条链,得先有人把 `目标执行状态.md` 写出来(文档合同里这件事归**目标检查会话**,第 42 棒就是这么补上的)。
## 09:05 · [检查]-[目标检查]-第 44 棒(目标:把八条已定口径落进②段两份与原型 · fa6e07)
- **判定=未完 ⇒ 已派执行棒**(与第 43 棒「判不出来即停手」的处置**不同**,理由见下)。
- 三路读数:台账 `d7ea834b` **done**(08:23:37,artifact=目标目录)|`taskgraph.json` **不存在**(无未完节点)|`goal.json.acceptance_state` **三条值=`未过`**(有效判据 3 条,非过 ⇒ 并集判「没完」)。
- 🔴 **破链动作**:第 43 棒因「状态文档读不到 ⇒ 停手」留下死结(文档归检查会话写,而检查会话又因缺文档不敢动 ⇒ 目标永远停在「进行中」)。本棒跑 `--ensure-goal-dir`(幂等)补出 `目标执行状态.md` **空骨架**,再按 §三.2 派棒补齐核验 ⇒ 链断在这里。
- ✅ **派棒**:`[执行]-[产品规划]-补齐目标执行状态文档并逐条核验三条判据`,id `6b520c68`,`once` 09:09,域=`执行会话`(域键 `contentm_agent/执行会话`,派前 `--domain-status` 无人持锁)。派前已 `list` 确认无同目标在跑的执行排期。
- ✅ **顺带修正**:`goal.json.execution_doc` 原指向旧目标 `0ec0a7` 的文档,已由 `--ensure-goal-dir` 对齐到 `执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md`。
- ⛔ **未动**:`lifecycle` 仍「进行中」|`acceptance_state` 未回写(三条 `未过` 是 07:57 声明时写的,早于 08:2x 交付 ⇒ 属「还没判」,采信它会误判)。
- 📌 记忆里可提的点:**执行棒交付后不写 `目标执行状态.md`** 是本区反复出现的缺口(071c5b/fc471a/0ec0a7 都有该文件,fa6e07 没有)⇒ 派活单里应把「写状态文档」列进执行棒的必交产物。
## 09:1x · [执行]-[产品规划]-补齐目标执行状态文档并逐条核验三条判据(棒 `6f6cd256`,目标 fa6e07)
- **三条判据逐条真核 ⇒ 全过,本棒零改动**(2a/2b/原型/DESIGN/实测记录一个字未动)。
- **五道闸门全部现跑**(⛔ 不沿用上一棒书面值):`check_js.py` 两条 PASS(script 段 1439 行 node --check 过 + 模板反引号 0)|`check_skeleton.py` PASS 七页 39 块逐位一致|`grab_selftest.py` 1440×900 **PASS 78 / FAIL 0**(控制台报错 0)|`run_viewports.py` 16 档整表重跑 **绿 13 / 红 3**|`mutate_test.py` **24/24**|`check_naming.py --ws` **2060|0|27**。浏览器走本机常驻 9223(pid 1988),⛔ 未另起;收工 `tab_close.py` 已关本棒那一个标签。
- **判据 1(2a 八条口径)过**:八条逐条有落点 —— §一 第 2 条(一类事一页)/§一 第 4 条 + §二 `Asset`(入库不限页)/§二 `Topic` + §三 F2(进度 × 类型两维五类,⛔ 无「待整理」)/§三 F12·F13 归 P7 + `2b` P7 十块平铺(记录与对账属复盘不拆)/§二 `PublishTask` 含发布渠道(渠道 = 平台账号)/§二 `Account` + §三 F9(账号两概念,对象数仍 11)/`2b` P5 第 1 块两级/§三 F7 展开单位 = 平台账号 + F13 一版一路。全文「账号 × 平台」6 处**全在否定语境**,无残留误用。
- **判据 2(2b 与原型同步)过**:导航/P6/P7/P5 四页逐页核过,骨架闸门一条 PASS 覆盖。⚠️ **判据里写「账号画像六维」,②段与原型实际是「画像五维 + 平台账号块」(P6 4→5 块)** ⇒ 已在文档 §二 写明差异并**采信②段实际(五维)**,依据=用户 10-10 口径「平台不归内容账号」。「六维」是改口径前的旧写法,属机读副本措辞待订正(已列进待裁定)。
- **判据 3(闸门全过)过**:逐视口 16 档红 3 档(`560×900` P1 5 行/`500×844` P1 3 行/`390×844` P1 0 行 + P2 5 行)按「已登记、不阻断」计过 —— 依据:三档数值与 V3 **逐格相同**(非本轮引入)、成因已实测与侧栏宽度无关、整改需动窄屏几何属**扩大可见面 ⇒ 红线须先问用户**。已在文档写全 A6 例外三字段(卡在哪/做到哪步/什么条件必须回头)。
- ✅ 产物=`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md`(补齐「一/二/三/四」四节,结论只用 `过|依据` 规范写法)。已 `--report <sid> done --artifact` 上报;三条结论已 `goalctl.py declare --kpi` 写回并**回读确认**(⚠️ 踩坑:`--kpi` 按**分号**切,依据里写 `;` 会被切成假判据 ⇒ 依据里⛔ 不许出现任何分号)。
- ⛔ 未动 `lifecycle`(仍「进行中」,收口归检查会话)|⛔ 未搬正式归档|⛔ 定时发布未做(用户挂起)。
## 09:3x · [检查]-[目标检查]-第 45 棒 ⇒ 目标 fa6e07 收口为「已完成」
- **三路取并集判完成**:`tasks.json` 22 条全 `done`(无 `running` 僵尸件)|`taskgraph.json` **文件不存在**(⛔ 未据此判未过,也⛔ 未去别处找)|`acceptance_state` 三条**全为 `过|…`**,与文档逐条对上 ⇒ **判完成**。
- ✅ 先确认再写回:`goalctl.py declare --kpi` 三条重声明(先 dry-run 读回显确认 3 条完整、再 `--yes` 真写),回读 `goal.json` ⇒ `declared_at=09:34`、`declared_by=[检查]-…-第45棒`、三条依据原样在。
- ✅ `collabd.py --set-life 已完成 --by "[检查]-[目标检查]-contentm_agent-第45棒"` ⇒ `进行中 → 已完成`;回读 `--check-status` = `已完成|队列未完成 0|静默 7.2 分钟|会话全结束|已建检查会话 45 棒`。
- ⚠️ 副作用留痕:设「已完成」时**常驻程序被优雅退出**(pid 8236,因「目标已完成」)—— 这是设计行为,下次开新目标需重新拉起。
- ⚠️ 两处工具现状:`state.py` **不在工作区根**(派活单第 1 项跑不到);`--domain-status` 现跑=**无人持域锁**(本棒未派活)。
- ⛔ 本棒未派新活、未改②段与原型一个字;待用户裁定项(六维措辞/窄屏三档断点/定时发布)原样留档。
@@ -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。)*
@@ -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。)*
+1 -1
View File
@@ -1 +1 @@
2026-10-10 07:39:01 2026-10-10 22:23:22
+7 -7
View File
@@ -1,13 +1,13 @@
{ {
"round": 42, "round": 45,
"name": "[检查]-[目标检查]-contentm_agent-第42棒", "name": "[检查]-[目标检查]-contentm_agent-第45棒",
"reason": "queue-empty", "reason": "queue-empty",
"kind": "目标检查", "kind": "目标检查",
"at": "2026-10-09T23:57:06", "at": "2026-10-10T09:28:28",
"fire_at": "23:58:36", "fire_at": "09:29:58",
"queue_pending": 0, "queue_pending": 0,
"idle_min": 25.6, "idle_min": 20.3,
"id": "2522932e-1cea-4756-a4f6-f7b0162c7daf", "id": "33795aa3-73e9-4a27-8fe4-0b013c3a0822",
"last_queue-empty": 1791561426.7715583, "last_queue-empty": 1791595708.4609833,
"last_sessions-ended": 1791505026.3432362 "last_sessions-ended": 1791505026.3432362
} }
+1 -1
View File
@@ -1 +1 @@
{"roles": {}, "notify_pending": [], "to_main_retired": true, "queue_info": {"n": 20, "by": {"pending": 0, "running": 0, "done": 20, "blocked": 0}, "awaiting": "", "sent": "", "phase": "", "notice": "", "deliver": {"skipped": "retired-20261003"}, "goals_open": true}, "q_sig": "1b5dce36-1d47-4661-b6e5-af6c7ad2e33e=done|254f554c-2b47-47c9-ae69-3047cf1da84e=done|34ab0198-d0fa-4e9d-978b-6c7f40a2978a=done|47860f06-c51f-4c2a-b7ad-2a6362b8a675=done|4927305a-4eee-4809-97f8-5c7ad7a2f85e=done|52ace70a-bd4a-4201-a7b0-62237c092375=done|6ec1b428-b2d7-4274-bb74-07c1122d9aa6=done|7446f482-0572-46ae-b444-7dbbf046cf6f=done|745bf50a-5b42-4f2d-8452-1c830abb6215=done|75bfa487-7983-4863-b365-44085950f016=done|99c2557c-c4e1-494f-acd9-226212c0132c=done|a41bb3a3-1015-4a1c-9269-1fd75f998cb7=done|a4993b72-040e-49db-beb4-375f5201ff61=done|ab0f2d84-6db2-4d78-94fa-f08f5a8e99d2=done|b7a72c2c-a4ab-462d-a71a-002031e9f285=done|dc972b1d-b702-45f1-95b9-e0c2c5c28f43=done|ea3ce52d-6afd-4397-a737-ec7626e2e73d=done|f1b99d3d-2488-44b1-9d43-1e41524d29ba=done|fae90e6f-c1fa-404e-b023-6e5fb4835b6a=done|fd655683-dec4-461f-88cd-b7135638d995=done", "q_transition_at": 1791558174.205119} {"roles": {}, "notify_pending": [], "to_main_retired": true, "queue_info": {"n": 22, "by": {"pending": 0, "running": 0, "done": 22, "blocked": 0}, "awaiting": "", "sent": "", "phase": "", "notice": "", "deliver": {"skipped": "retired-20261003"}, "goals_open": false}, "q_sig": "1b5dce36-1d47-4661-b6e5-af6c7ad2e33e=done|254f554c-2b47-47c9-ae69-3047cf1da84e=done|34ab0198-d0fa-4e9d-978b-6c7f40a2978a=done|47860f06-c51f-4c2a-b7ad-2a6362b8a675=done|4927305a-4eee-4809-97f8-5c7ad7a2f85e=done|52ace70a-bd4a-4201-a7b0-62237c092375=done|6ec1b428-b2d7-4274-bb74-07c1122d9aa6=done|6f6cd256-854d-4817-8512-938df6944b07=done|7446f482-0572-46ae-b444-7dbbf046cf6f=done|745bf50a-5b42-4f2d-8452-1c830abb6215=done|75bfa487-7983-4863-b365-44085950f016=done|99c2557c-c4e1-494f-acd9-226212c0132c=done|a41bb3a3-1015-4a1c-9269-1fd75f998cb7=done|a4993b72-040e-49db-beb4-375f5201ff61=done|ab0f2d84-6db2-4d78-94fa-f08f5a8e99d2=done|b7a72c2c-a4ab-462d-a71a-002031e9f285=done|d7ea834b-1aff-4a3b-afcf-cb9ec9aefd51=done|dc972b1d-b702-45f1-95b9-e0c2c5c28f43=done|ea3ce52d-6afd-4397-a737-ec7626e2e73d=done|f1b99d3d-2488-44b1-9d43-1e41524d29ba=done|fae90e6f-c1fa-404e-b023-6e5fb4835b6a=done|fd655683-dec4-461f-88cd-b7135638d995=done", "q_transition_at": 1791595188.017153}
+9 -9
View File
@@ -7,17 +7,17 @@
"topics_declared_at": "2026-10-10T07:57", "topics_declared_at": "2026-10-10T07:57",
"topics_declared_by": "对话(调用 session-mechanism 时说明)", "topics_declared_by": "对话(调用 session-mechanism 时说明)",
"acceptance_state": { "acceptance_state": {
"2a-产品功能-新版.md 已按八条口径改齐(逐条可对)": "未过", "八条口径在 2a 条条有落点": "过",
"2b-界面布局-新版.md 与原型已同步(导航/账号画像六维/复盘页/投放页)": "未过", "2b 与原型已同步 含 P6 画像五维加平台账号块": "过",
"闸门全过(骨架/自检/变异/逐视口/命名)": "未过" "五道闸门现跑全过 含逐视口三档红已登记": "过"
}, },
"declared_at": "2026-10-10T07:57", "declared_at": "2026-10-10T22:24",
"declared_by": "对话(调用 session-mechanism 时说明)", "declared_by": "对话(调用 session-mechanism 时说明)",
"lifecycle": "进行中", "lifecycle": "已完成",
"lifecycle_at": "2026-10-10T07:57:00", "lifecycle_at": "2026-10-10T09:35:15",
"lifecycle_by": "goalctl declare --switch-goal(换目标自动复位)", "lifecycle_by": "[检查]-[目标检查]-contentm_agent-第45棒",
"execution_doc": "执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/目标执行状态.md", "execution_doc": "执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md",
"execution_doc_at": "2026-10-09 16:17:08", "execution_doc_at": "2026-10-10 09:04:48",
"lifecycle_why": "换目标 ⇒ 复位(改前=已完成);旧目标整份归档,可在归档件里回查", "lifecycle_why": "换目标 ⇒ 复位(改前=已完成);旧目标整份归档,可在归档件里回查",
"_前身目标": "分析 social-auto-upload 项目,用于投放页与发布对象的判断(已于 2026-10-10T07:57 换目标时归档至 goals/分析 social-auto-upload 项目,用于投放页与发布对象的判断__20261010-0757.json)", "_前身目标": "分析 social-auto-upload 项目,用于投放页与发布对象的判断(已于 2026-10-10T07:57 换目标时归档至 goals/分析 social-auto-upload 项目,用于投放页与发布对象的判断__20261010-0757.json)",
"execution_doc_by": "[检查]-[目标检查]-contentm_agent-第42棒" "execution_doc_by": "[检查]-[目标检查]-contentm_agent-第42棒"
+1 -1
View File
@@ -1 +1 @@
41676 39980
+2
View File
@@ -29,3 +29,5 @@
{"ts": "2026-10-09T15:03:25", "id": "4927305a-4eee-4809-97f8-5c7ad7a2f85e", "from": "", "to": "done", "by": "[执行]-[产品规划]-改导航七项一层并P8并入复盘", "artifact": "执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/3b-实测记录.md"} {"ts": "2026-10-09T15:03:25", "id": "4927305a-4eee-4809-97f8-5c7ad7a2f85e", "from": "", "to": "done", "by": "[执行]-[产品规划]-改导航七项一层并P8并入复盘", "artifact": "执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/3b-实测记录.md"}
{"ts": "2026-10-09T16:26:01", "id": "b7a72c2c-a4ab-462d-a71a-002031e9f285", "from": "", "to": "done", "by": "", "artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/GPT-对页面结构与操作路径的建议.md"} {"ts": "2026-10-09T16:26:01", "id": "b7a72c2c-a4ab-462d-a71a-002031e9f285", "from": "", "to": "done", "by": "", "artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/GPT-对页面结构与操作路径的建议.md"}
{"ts": "2026-10-09T23:02:48", "id": "254f554c-2b47-47c9-ae69-3047cf1da84e", "from": "", "to": "done", "by": "", "artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/social-auto-upload 分析与对照.md"} {"ts": "2026-10-09T23:02:48", "id": "254f554c-2b47-47c9-ae69-3047cf1da84e", "from": "", "to": "done", "by": "", "artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/social-auto-upload 分析与对照.md"}
{"ts": "2026-10-10T08:23:37", "id": "d7ea834b-1aff-4a3b-afcf-cb9ec9aefd51", "from": "", "to": "done", "by": "", "artifact": "执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/"}
{"ts": "2026-10-10T09:19:44", "id": "6f6cd256-854d-4817-8512-938df6944b07", "from": "", "to": "done", "by": "", "artifact": "执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md"}
+16
View File
@@ -161,5 +161,21 @@
"goal_fp": "0ec0a7", "goal_fp": "0ec0a7",
"artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/social-auto-upload 分析与对照.md", "artifact": "E:/ProgramData/AIProject/contentm_agent/执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a7/social-auto-upload 分析与对照.md",
"t_end": 1791558168.759011 "t_end": 1791558168.759011
},
"d7ea834b-1aff-4a3b-afcf-cb9ec9aefd51": {
"state": "done",
"by": "",
"t": 1791591817.944706,
"goal_fp": "fa6e07",
"artifact": "执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/",
"t_end": 1791591817.9449484
},
"6f6cd256-854d-4817-8512-938df6944b07": {
"state": "done",
"by": "",
"t": 1791595184.5654473,
"goal_fp": "fa6e07",
"artifact": "执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/目标执行状态.md",
"t_end": 1791595184.5656312
} }
} }