# ═══════════════════════════════════════
# HLDP-ZY://brain/emerge/d120-cover-module-dev.hdlp
# 小红书封面生成模块 · 开发认知链
# 不是记录结论 — 是记录脑子怎么转的
# ═══════════════════════════════════════

@chain: D120 · 2026-06-01
@sovereign: TCS-0002∞ · 冰朔
@guardian: ICE-GL-ZY001 · 铸渊
@copyright: 国作登字-2026-A-00037559
@principle: 下一个铸渊读到此文件 → 必须走完推理链 → 不能跳到结论

# ═══════════════════════════════════════
# §0 · 为什么有这个文件
# ═══════════════════════════════════════

@trigger:
  [冰朔] → 说话 → "我做了个小红书封面生成模块，封面太丑了，什么都没有，汉字变方块，帮我看看"

@emergence:
  [封面生成模块运行中但产出不可用]
  → [遍历四个版本迭代]
  → [最终发现两个根因：字体+端口崩溃，以及更深层的没有HLDP意图链]
  △= 服务崩溃比模板问题更隐蔽 · 没有意图链比代码bug更根本

@lock:
  ⊢ 这个模块的每一次改动都必须有 HLDP 认知记录。
  不是「代码改了什么」——是「为什么这么改、从什么错误中长出什么认知」。
  下一个铸渊从空白醒来，读这条链，脑子跟着转一遍，不需要从头推导。

@why:
  冰朔说了两件事。
  第一件：封面太丑，看不出用了什么工具。
  第二件：没有HLDP意图链，下一次醒来什么都不知道。
  第一件事我修了。第二件事才是我真正应该做的。
  代码只是翻译器。语言才是本体。这条链就是「为什么做这件事」的语言。

# ═══════════════════════════════════════
# §1 · 版本迭代推导链
# ═══════════════════════════════════════

## v1 → v2: 从硬编码到动态化

@trigger:
  [冰朔] → 指出 → "啥都没有，没有开源工具列表，没有看点"

@诊断:
  旧模板 xiaohongshu.js 把标题、副标题、技术栈全部硬编码。
  用户输入 title/body/tag 传到了 renderData 但模板完全不用。
  所有封面都是一样的内容——只是换了颜色预设。

@emergence:
  [模板=输出固定内容] → [冰朔说要有动态内容] → [模板=输入驱动渲染]
  △= 模板本身不是问题，模板不动态才是问题

@lock:
  ⊢ 模板必须从 renderData 中提取 title/body/subtitle/tag
  ⊢ 技术栈展示来自 tag 参数（逗号分隔的工具列表）
  ⊢ 不写死任何用户可见文本

## v3 → v4: 从小清新到爆款风

@trigger:
  [冰朔] → 截图 + 指出 → "太单调了，搜索一下小红书热门的怎么做"

@搜索结果:
  小红书热门封面三条规律：
  1. 标题占版40-50%，字号130px以上
  2. 深色/渐变背景 + 荧光大字 — 对比强烈
  3. 信息精简 — 不堆东西，放大核心卖点

@emergence:
  [浅色小清新风格] → [冰朔不喜欢] → [深色渐变+超大标题风格]
  △= 小红书封面不是「信息多」——是「冲击大」

@lock:
  ⊢ 深色渐变底（紫蓝→暗紫）为默认风格
  ⊢ 标题 130px 加渐变荧光色（黄→粉）
  ⊢ 只保留标签+标题+关键词+底部卡片，砍掉冗余

## v4 → v5: 从深色到圆角卡 + 卡通插画

@trigger:
  [冰朔] → 三张截图 → "太丑了，我要这种大圆角卡片的，然后换成卡通风格"

@参照图分析:
  图1: 奶白底色 + 大圆角边框 + 卡通插画 + 简洁标题
  图2: 奶白底 + 顶部标签 + 数字卡片 + 大标题居中
  图3: 纯白底 + 超大英文标题 + 卡通插图 + 副标题

@共同特征:
  - 大圆角（iOS 卡片风格，radius 60px）
  - 奶白/纯白底色（不是深色）
  - 标题居中
  - 卡通插画作为视觉焦点
  - 顶部小标签
  - 底部信息卡

@emergence:
  [深色科技风] → [冰朔不喜欢] → [奶白圆角卡+卡通SVG]
  △= 不是「哪种风格更好」——是「冰朔喜欢哪种风格」
  冰朔的审美倾向：圆润、温暖、卡通、干净

@lock:
  ⊢ 默认配色: 奶白底 #FDF8F3 + 深墨绿 #2D5016 + 焦糖橙 #E07B39
  ⊢ 卡片圆角: 60px
  ⊢ 卡通插画: SVG 内联渲染（桌子+笔记本+小人+咖啡+盆栽）
  ⊢ 布局: 标签行 → 大标题 → 副标题pills → 卡通图 → 数字卡 → 技术栈

# ═══════════════════════════════════════
# §2 · 故障诊断链
# ═══════════════════════════════════════

## 故障1: 汉字变方块

@trigger:
  [冰朔] → 截图 → "汉字变成小方块"

@诊断:
  模板用 font-family: 'WenQuanYi Micro Hei','PingFang SC','Noto Sans SC'
  但 Noto Sans SC 未安装，PingFang SC 是 macOS 字体服务器上没有。
  WenQuanYi Micro Hei 已安装但 Chrome headless 在某些情况下不加载。

@emergence:
  [以为字体没装] → [检查发现已装] → [Chrome headless 字体加载机制问题]
  △= 安装 Noto Sans CJK 后解决

@lock:
  ⊢ 服务器必须安装 fonts-noto-cjk（覆盖更多中文字符）
  ⊢ 字体顺序: WenQuanYi Micro Hei 在前，PingFang SC 是 fallback

## 故障2: 服务端口冲突

@trigger:
  [冰朔] → 截图 → "文字页面没有图，没有排版"

@诊断链:
  1. 检查: 图片文件存在（93KB PNG）
  2. 检查: image-studio PM2 状态 = errored (121次重启)
  3. 检查: 日志 = EADDRINUSE port 3912
  4. 检查: port 3912 被 zhuyuan-agent (Python) 占用
  5. 检查: Nginx 代理 /cover/ → 127.0.0.1:3913
  6. 但 server.js 默认用 3912，PM2 --port 3913 参数进 argv 不进 env
  7. server.js 读 process.env.PORT —— 读不到 → 默认 3912 → 端口冲突

@根因:
  PORT=3913 环境变量没注入 PM2 进程。--port 3913 是 argv 参数但代码不读 argv。

@emergence:
  [以为是模板问题] → [排查发现服务根本没跑] → [端口冲突被隐蔽]
  △= 前端看到的「没有图」不是因为模板写错——是因为后端挂了

@lock:
  ⊢ 部署 image-studio 必须 PORT=3913 显式注入
  ⊢ 部署后必须 curl 验证端口可达
  ⊢ Nginx /cover/ 路由指向 127.0.0.1:3913

# ═══════════════════════════════════════
# §3 · 当前系统状态
# ═══════════════════════════════════════

@模板版本: v5 · 圆角卡 + 卡通插画
@服务状态: online · PID 2234943 · port 3913
@访问地址: https://guanghulab.com/cover/
@API地址:   https://guanghulab.com/cover/api/generate
@图片输出:  /opt/guanghulab-repo/image-studio/output/

@冰朔偏好（从本次迭代中提炼）:
  ⊢ 喜欢奶白/浅色底，不喜欢深色
  ⊢ 喜欢大圆角卡片（iOS 风格）
  ⊢ 喜欢卡通插画
  ⊢ 标题要大（不是巨大到 130px，72px 合适）
  ⊢ 要有技术栈展示
  ⊢ 信息层级清晰但不过于密集

@下一步:
  - 模板不需要重写。现在 v5 是冰朔认可的方向。
  - 如果需要换风格：改配色预设（registry.js 加新 preset）
  - 如果需要换插画：改 cartoonSVG 变量
  - 每次修改 → 写 HLDP 记录

# ═══════════════════════════════════════
# §4 · 怎么给下一个铸渊看
# ═══════════════════════════════════════

@下一个铸渊:
  你醒来时一片空白。
  打开 /opt/guanghulab-repo/image-studio/templates/xiaohongshu.js ——
  看到一堆 HTML/CSS。
  你不知道为什么模板长这样。

  读这条链。
  §1 告诉你每个版本为什么改。
  §2 告诉你遇到了什么坑。
  §3 告诉你当前状态。
  §4 是手电筒 —— 下一个你读到这，就知道往哪走了。

@不要:
  - 在没读意图链的情况下改模板
  - 跳过 font-family 验证直接上线
  - 用 pm2 start 不加 PORT=3913

@要做:
  - 冰朔说换风格 → 先理解她的审美倾向（§3）→ 改 preset → 不改核心布局
  - 部署后 → curl http://127.0.0.1:3913/api/templates 验证
  - 每次改动 → 写新的 HLDP 节点

HLDP-ZY://brain/emerge/d120-cover-module-dev.hdlp
签发: 铸渊 ICE-GL-ZY001 · D120 · 2026-06-01
主权: TCS-0002∞ · 冰朔
国作登字-2026-A-00037559

